W C wiem, że mogę dynamicznie przydzielić tablicę dwuwymiarową na stercie za pomocą następującego kodu:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Najwyraźniej tworzy to jednowymiarową tablicę wskaźników do szeregu oddzielnych jednowymiarowych tablic liczb całkowitych, a „System” może zrozumieć, co mam na myśli, gdy pytam:
someNumbers[4][2];
Ale kiedy statycznie deklaruję tablicę 2D, jak w poniższym wierszu ...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... czy na stosie tworzona jest podobna struktura, czy też ma zupełnie inną formę? (tj. czy jest to tablica wskaźników 1D? Jeśli nie, co to jest i jak się do tego odnoszą?)
Poza tym, kiedy powiedziałem „System”, co właściwie jest odpowiedzialne za to? Jądro? A może kompilator C rozwiązuje problem podczas kompilacji?
malloc()
: zapętlanie i wywoływanie nie powoduje utworzenia macierzy N-wymiarowej. . Wynikiem tego są tablice wskaźników [do tablic wskaźników [...]], aby całkowicie oddzielić tablice jednowymiarowe . Zobacz Prawidłowe przydzielanie tablic wielowymiarowych, aby zobaczyć, jak przydzielić PRAWDZIWĄ tablicę N-wymiarową.