c - 为变量赋值会存储在错误的位置?

标签 c arrays

我对 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/

相关文章:

php - 在php中按照另一个数组的值的顺序对数组进行排序

python - 如何将一个列表的元素添加到另一个没有括号且没有导入的列表中?

c - 求参数二次方程的参数

c - 如何将 MD5 生成的十六进制值存储为整数?

c - 在其他线程执行 mutex_unlock() 之后,等待互斥体的线程是否会立即获得所有权?

javascript - 我的 if 语句不起作用

C 将结构体写入数组

python - 与 Python 相比,具有动态分配的结构数组在 C 中运行非常慢

c - 求一个数的 n 次方根的函数

arrays - 快速显示重复循环中的数组输出