In C weiß ich, dass ich ein zweidimensionales Array auf dem Heap mithilfe des folgenden Codes dynamisch zuordnen kann:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Dies erzeugt eindeutig ein eindimensionales Array von Zeigern auf eine Reihe separater eindimensionaler Arrays von ganzen Zahlen, und "The System" kann herausfinden, was ich meine, wenn ich frage:
someNumbers[4][2];
Aber wenn ich statisch ein 2D-Array deklariere, wie in der folgenden Zeile ...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... wird eine ähnliche Struktur auf dem Stapel erstellt oder hat sie eine vollständig andere Form? (dh ist es ein 1D-Array von Zeigern? Wenn nicht, was ist es und wie werden Verweise darauf herausgefunden?)
Und als ich "The System" sagte, was ist eigentlich dafür verantwortlich, das herauszufinden? Der Kernel? Oder sortiert der C-Compiler dies beim Kompilieren?
malloc()
nicht zu einem N-dimensionalen Array. . Es führt zu Arrays von Zeigern [zu Arrays von Zeigern [...]], um eindimensionale Arrays vollständig zu trennen . Weitere Informationen zum Zuweisen von TRUE N-dimensionalen Arrays finden Sie unter Richtiges Zuweisen mehrdimensionaler Arrays.