最佳答案
在C中,我知道我可以使用以下代码在堆上动态分配一个二维数组:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
显然,这实际上创建了一个一维数组的指针,指向一组单独的一维整数数组,“系统”可以找出我的意思,当我问:
someNumbers[4][2];
但是当我静态地声明一个2D数组时,如下所示…:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
...是否在堆栈上创建了类似的结构,或者它完全是另一种形式?(例如,它是指针的1D数组吗?如果不是,它是什么,它的引用是如何被计算出来的?)
还有,当我说“系统”的时候,实际上是什么负责解决这个问题呢?内核?或者C编译器在编译时将其排序?