Avi*_*vaT 1 c pointers multidimensional-array
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;
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是3,12,0,0.不应该是1,4,7,17,因为x存储数组的第一个元素的地址?
当我试图打印时
printf("%u, %u \n", x, &x[0][0] );
Run Code Online (Sandbox Code Playgroud)
它显示了相同的地址2108666688,2108666688
但是当我尝试使用打印数组时
for(int i = 0; i<4; ++i)
{
for(int j = 0; j<3 ; ++j)
{
printf("%d ",x[i][j]);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
我看到输出为
3 6 9
12 0 0
0 0 0
0 0 0
Run Code Online (Sandbox Code Playgroud)
那么,到底发生了什么?为什么没有将数字正确分配给数组?
unsigned int x[4][3] = {(1,2,3),(4,5,6),(7,8,9),(17,11,12)};
Run Code Online (Sandbox Code Playgroud)
在功能上等同于:
unsigned int x[4][3] = {3, 6, 9, 12};
Run Code Online (Sandbox Code Playgroud)
因为逗号运算符在这里工作!逗号运算符计算其所有操作数并生成其最后一个操作数的结果.
所以你看到的输出是预期的.你可能意味着:
unsigned int x[4][3] = {{1,2,3},{4,5,6},{7,8,9},{17,11,12}};
Run Code Online (Sandbox Code Playgroud)