我对 C 还比较陌生,这让我现在很困惑。它是一个更大程序的一部分,但我编写了这个小程序来描述我遇到的问题。
#include <stdio.h>
int main()
{
signed int tcodes[3][1];
tcodes[0][0] = 0;
tcodes[0][1] = 1000;
tcodes[1][0] = 1000;
tcodes[1][1] = 0;
tcodes[2][0] = 0;
tcodes[2][1] = 1000;
tcodes[3][0] = 1000;
tcodes[3][1] = 0;
int x, y, c;
for(c = 0; c <= 3; c++)
{
printf("%d %d %d\r\n", c, tcodes[c][0], tcodes[c][1]);
x = 20;
y = 30;
}
我希望这个程序输出:
0 0 1000
1 1000 0
2 0 1000
3 1000 0
但相反,我得到:
0 0 1000
1 1000 0
2 0 20
3 20 30
它对分配给 x 和 y 的任何数字执行此操作。出于某种原因,x 和 y 覆盖了内存中的数组部分。
谁能解释一下这是怎么回事?
谢谢!
最佳答案
tcodes[3][0] = 1000;
tcodes[3][1] = 0;
两次注销数组的末尾。 [3] 分配 slot id 0-2 而 [1] 只分配 1 个实际 slot [0]。
将 tcodes 的初始化更改为 signed int tcodes[4][2];
4 个条目乘 2 个条目。
关于c - 为变量赋值会存储在错误的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2741711/