Dalam pengaturcaraan, tatasusunan ialah struktur data penting untuk menyimpan koleksi data. Apabila berurusan dengan tatasusunan berbilang dimensi, adalah penting untuk memahami cara ia boleh dihantar ke fungsi untuk melaksanakan operasi pada elemennya.
Pertimbangkan kod C berikut:
void print(int *arr[], int s1, int s2) { // ... } int main() { int a[4][4] = {{0}}; print(a, 4, 4); }
Kod ini bertujuan untuk lulus tatasusunan berbilang dimensi a daripada jenis int[4][4] kepada cetakan fungsi yang mengharapkan tatasusunan penunjuk kepada integer (int **). Anehnya, kod ini berjaya menyusun dalam C tetapi tidak dalam C .
Dalam C , ralat adalah jelas:
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
Ralat ini menandakan bahawa C tidak membenarkan penukaran tersirat daripada tatasusunan berbilang dimensi (int[4][4]) kepada tatasusunan penunjuk kepada integer (int **). Ini kerana kedua-dua jenis data ini pada asasnya berbeza dalam struktur dan tafsiran.
Untuk membetulkan ralat ini, anda boleh menggunakan teknik yang dipanggil "pereputan alamat tatasusunan" dalam C atau secara eksplisit menukar tatasusunan berbilang dimensi kepada tatasusunan penunjuk dalam C .
C:
int main() { int a[4][4] = {{0}}; print(a, 4); // Pass the base address of the multidimensional array (array address decay) } void print(int *arr, int s) { // ... }
C :
int main() { int a[4][4] = {{0}}; print(a, 4, 4); // Explicit conversion to an array of pointers } void print(int **arr, int s1, int s2) { // ... }
Atas ialah kandungan terperinci Bagaimanakah Tatasusunan Berbilang Dimensi Boleh Dihantar kepada Fungsi dalam C dan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!