我的C中的二维数组有问题。假设2D数组是board[d][d]
(d=7
),我想将board[d-1][d-2]
的值赋给int
。当我这样做时,我得到错误,如果我printf board[d-1][d-2]
我得到32766
。数组中的最高值为d*d-1=48
。
我做错了什么?
int main(void)
{
int d=7;
int nr=(d*d)-1;
int board[d][d];
int u=board[d-1][d-2];
bool even=false;
if ((d/2)*2!=d)
{
even=true;
}
printf("%d\n", even);
printf("%i\n", board[d-1][d-2]); //result here is 32764?
for(int i=0;i<d;i++)
{
for(int j=0;j<d;j++)
{
board[i][j]=nr;
nr--;
printf(" %2d", board[i][j]);
}
printf("\n");
}
return 0;
}
答案 0 :(得分:0)
这是因为你没有用任何值初始化它,所以它只是存储在内存atm中发生的任何垃圾。 您需要在板上运行并为其设置初始值。
答案 1 :(得分:0)
当您创建board
数组时,它不会被初始化 - 您会在里面获得垃圾值。一个好的做法是在使用之前初始化数组
int board[d][d] = {0};
如果在用数组填充数组的循环之后移动printf
,您将获得预期的结果