Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Tatasusunan Berbilang Dimensi Boleh Dihantar kepada Fungsi dalam C dan C?

Bagaimanakah Tatasusunan Berbilang Dimensi Boleh Dihantar kepada Fungsi dalam C dan C?

DDD
Lepaskan: 2024-12-24 17:28:18
asal
182 orang telah melayarinya

How Can Multidimensional Arrays Be Passed to Functions in C and C  ?

Melalukan Tatasusunan Berbilang Dimensi kepada Fungsi dalam C dan C

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);
}
Salin selepas log masuk

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 .

Mengapa C Menimbulkan Ralat

Dalam C , ralat adalah jelas:

cannot convert `int (*)[4]' to `int**' for argument `1' to 
`void print(int**, int, int)'
Salin selepas log masuk

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.

Cara Membetulkan Ralat

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) {
    // ...
}
Salin selepas log masuk

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) {
    // ...
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan