Melalui Tatasusunan Berbilang Dimensi kepada Berfungsi dalam C
Dalam coretan kod ini, percubaan dibuat untuk menghantar tatasusunan berbilang dimensi gaya C kepada fungsi yang mengharapkan tatasusunan penunjuk integer:
#include<stdio.h> void print(int *arr[], int s1, int s2) { ... } int main() { int a[4][4] = {{0}}; print(a,4,4); }
Kod ini disusun dalam C tetapi tidak dalam C. Inilah sebabnya:
print(&a[0],4,4);
Dalam C , pereputan ini bukan dibenarkan. Jenis tatasusunan int4 tidak boleh ditukar secara tersirat kepada jenis penunjuk int**. Ini menerangkan mesej ralat:
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
Penyelesaian:
Untuk menghantar tatasusunan berbilang dimensi kepada fungsi dalam C , seseorang mesti menukar secara eksplisit ia ke penunjuk jenis yang sesuai. Ini boleh dicapai menggunakan teknik berikut:
#include<stdio.h> void print(int **arr, int s1, int s2) { ... } int main() { int a[4][4] = {{0}}; print((int **)a,4,4); }
Dengan menukar tatasusunan secara eksplisit kepada penuding menggunakan cast (int )**, kod itu kini menyusun dan bertindak seperti yang dimaksudkan dalam kedua-dua C dan C .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melepasi Tatasusunan Berbilang Dimensi dengan betul kepada Fungsi dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!