Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menyalurkan Tatasusunan Berbilang Dimensi dengan betul kepada Fungsi dalam C dan C?

Bagaimanakah Saya Boleh Menyalurkan Tatasusunan Berbilang Dimensi dengan betul kepada Fungsi dalam C dan C?

Mary-Kate Olsen
Lepaskan: 2024-12-15 00:50:12
asal
844 orang telah melayarinya

How Can I Correctly Pass Multidimensional Arrays to Functions in C and C  ?

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

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:

  1. Isytiharkan penuding tatasusunan sebagai penuding kepada penuding: int **arr.
  2. Tukar nama tatasusunan kepada penuding kepada penunjuk tatasusunan: arr = (int **)a.

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan