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
Mary-Kate Olsenasal
2024-12-15 00:50:12766semak imbas

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)'

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);
}

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:
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