Di C, saya tahu saya dapat secara dinamis mengalokasikan array dua dimensi di heap menggunakan kode berikut:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Jelas, ini sebenarnya menciptakan array satu dimensi dari pointer ke sekelompok array satu dimensi yang terpisah dari integer, dan "Sistem" dapat mengetahui apa yang saya maksud ketika saya meminta:
someNumbers[4][2];
Tetapi ketika saya secara statis mendeklarasikan array 2D, seperti pada baris berikut ...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... apakah struktur serupa dibuat pada stack, atau apakah itu dari bentuk lain sepenuhnya? (Yaitu apakah itu array 1D pointer? Jika tidak, apa itu, dan bagaimana referensi untuk itu bisa diketahui?)
Juga, ketika saya berkata, "Sistem," apa yang sebenarnya bertanggung jawab untuk mencari tahu? Kernel? Atau apakah kompiler C mengatasinya saat kompilasi?
malloc()
tidak menghasilkan array N-dimensi. . Ini menghasilkan array pointer [ke array pointer [...]] untuk sepenuhnya memisahkan array satu dimensi . Lihat Mengalokasikan array multi-dimensi dengan benar untuk melihat bagaimana mengalokasikan array N-dimensi yang BENAR .