int *x[n][m]
声明了一个指向整数的指针的2维数组x
,因此分配内存应该像x[i][j] = new int
一样容易,并且预期它能正常工作。现在,如果我将声明更改为:
int (*x)[n][m]
x[i][j] = new int
不再有效并导致编译错误。
x = (int(*)[n][m]) malloc (sizeof(int[n][m]))
然而可以编译通过。从我运行的少量测试中看来,在内存分配后,不同的声明/分配组合似乎不影响变量中存储的值。我是否漏掉了什么?所以我的问题是:int *x[n][m]和int (*x)[m][n]之间有什么区别?int (x)[n][m]如何在内存中存储?
int (*x)[n][m]
是一个指向整数的二维数组的指针。与指向该数组第一行的指针相比,它们之间的区别微妙且可能令人困惑;我现在没有精力去深入讨论,因为我熬夜得太晚了。 - user2357112