Memahami Ketidakupayaan untuk Melepasi Tatasusunan Berbilang Dimensi kepada Fungsi
Pertimbangkan coretan kod berikut:
#include <stdio.h> void print(int *arr[], int s1, int s2) { int i, j; for(i = 0; i < s1; i++) for(j = 0; j < s2; j++) printf("%d, ", *((arr + i) + j)); } int main() { int a[4][4] = {{0}}; print(a, 4, 4); }
Kod ini bertujuan untuk menghantar tatasusunan berbilang dimensi a kepada cetakan fungsi yang mengambil tatasusunan penunjuk int int *arr[]. Walau bagaimanapun, dalam C , kod ini menghasilkan ralat berikut:
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
Penjelasan:
Inti isu ini terletak pada jenis data yang tidak serasi. Tatasusunan berbilang dimensi gaya C seperti a tidak boleh ditukar terus kepada penuding kepada tatasusunan penunjuk int *arr[]. Dalam C , jenis data a ialah int[4][4], yang mewakili tatasusunan dua dimensi integer. Sebaliknya, int *arr[] ialah penunjuk kepada tatasusunan integer, di mana setiap elemen ialah penunjuk kepada integer.
Penyelesaian:
Kepada selesaikan isu ini dan hantar tatasusunan multidimensi kepada fungsi yang mengambil tatasusunan penunjuk int, anda boleh mengubah suai kod untuk menukar tatasusunan multidimensi secara eksplisit kepada pelbagai penunjuk. Ini boleh dicapai dengan menggunakan teknik seperti yang diterangkan dalam jawapan yang diterima untuk soalan "Menukar tatasusunan berbilang dimensi kepada penunjuk dalam C ".
Nota Tambahan:
Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Melepasi Tatasusunan Berbilang Dimensi kepada Fungsi sebagai Tatasusunan Penunjuk dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!