Melalui Tatasusunan Berbilang Dimensi dalam C dan C
Dalam kedua-dua C dan C, tatasusunan jenis int4 tidak boleh dihantar terus ke fungsi yang mengharapkan tatasusunan int*. Ketidakserasian ini berpunca daripada perbezaan asas dalam cara kedua-dua bahasa ini mengendalikan tatasusunan berbilang dimensi.
Dalam C, nama tatasusunan berbilang dimensi mereput kepada penuding kepada elemen pertamanya, membenarkan pelaksanaan yang dicontohkan dalam coretan kod. Walau bagaimanapun, dalam C , tatasusunan mengekalkan jenisnya walaupun digunakan dalam panggilan fungsi, mengakibatkan mesej ralat ditemui:
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
Penyelesaian untuk C dan C
Kepada lulus tatasusunan berbilang dimensi kepada fungsi dalam kedua-dua C dan C, teknik yang dikenali sebagai aritmetik penunjuk ialah digunakan:
Kod Diubah Suai
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((int **)a, 4, 4); }
Nota Penting
Kod menyusun dan melaksanakan berjaya dalam kedua-dua C dan C. Walau bagaimanapun, pembetulan tambahan telah dibuat pada pernyataan printf untuk memastikan akses yang betul kepada elemen tatasusunan menggunakan arr[i][j] dan bukannya *((arr i) j).
Ingat, ketidakupayaan untuk melepasi tatasusunan berbilang dimensi secara langsung timbul daripada gelagat tatasusunan yang berbeza dalam C dan C dan mesti ditangani dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyalurkan Tatasusunan Berbilang Dimensi dengan betul kepada Fungsi dalam C dan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!