在C语言中,我知道可以使用以下代码在堆上动态分配二维数组:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
显然,这实际上创建了一个指向许多单独的一维整数数组的指针的一维数组,并且当我请求时,“系统”可以理解我的意思:
someNumbers[4][2];
但是当我像下面这行代码一样静态地声明一个二维数组时...
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
类似的结构是否在堆栈上创建,还是完全不同的形式? (即,它是指针的一维数组吗?如果不是,它是什么,如何找到对它的引用?)
另外,当我说“系统”时,实际上是谁负责解决这个问题?内核?还是C编译器在编译时解决?
malloc()
并不会得到一个 N 维数组,而是得到指向完全独立的一维数组的指针数组 [指向指针数组[...]]。请参见 正确分配多维数组 以了解如何分配真正的 N 维数组。 - Andrew Henle