【发布时间】:2017-10-07 10:43:24
【问题描述】:
int main(void) {
unsigned int x[4][3] = {(1,2,3),(4,5,6),(7,8,9),(17,11,12)};
printf("%d, %u, %u, %u \n",**x, **(x+1), **(x+2), **(x+3));
return 0;
}
上面代码的输出是 3, 12, 0, 0。 不应该是 1,4,7,17,因为 x 存储了数组的第一个元素的地址吗?
当我尝试打印时
printf("%u, %u \n", x, &x[0][0] );
显示相同的地址 2108666688, 2108666688
但是当我尝试使用
打印数组时for(int i = 0; i<4; ++i)
{
for(int j = 0; j<3 ; ++j)
{
printf("%d ",x[i][j]);
}
printf("\n");
}
我看到输出为
3 6 9
12 0 0
0 0 0
0 0 0
那么,这里到底发生了什么?为什么数字没有正确分配给数组?
【问题讨论】:
-
{(1,2,3),(4,5,6),(7,8,9),(17,11,12)}未达到您的预期。认真对待编译器的警告。 -
是的,新代码总是使用“-Wall”
标签: c pointers multidimensional-array