我在c中有一个二维数组的问题。说二维数组是board[d][d]
(d=7
),我想将board[d-1][d-2]
的值分配给int
。当我这样做,我得到错误,如果我打印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("%dn", even);
printf("%in", 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;
}
这是因为您没有用任何值初始化它,所以它只是将碰巧在内存中存在的任何垃圾存储在内存中。您需要在板上运行并为其设置初始值。
当你创建board
数组时,它没有初始化-你在里面得到垃圾值。一个好的做法是在使用数组之前初始化它
int board[d][d] = {0};
如果您将printf
移动到您用值填充数组的循环之后,您将得到预期的结果