Rumah >pembangunan bahagian belakang >C++ >Mengapakah Menukar Penunjuk-ke-Penunjuk-ke-Bukan-konst kepada Penunjuk-ke-Penunjuk-ke-konst Dilarang dalam C ?

Mengapakah Menukar Penunjuk-ke-Penunjuk-ke-Bukan-konst kepada Penunjuk-ke-Penunjuk-ke-konst Dilarang dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-12-20 15:08:14546semak imbas

Why is Converting a Pointer-to-Pointer-to-Non-const to a Pointer-to-Pointer-to-const Prohibited in C  ?

Penyahrujukan Penunjuk: Mengapa Penukaran kepada 'penunjuk kepada penuding kepada const' Dilarang

Dalam C , dibenarkan untuk menukar penuding -kepada-bukan-const ke penunjuk-ke-const. Walau bagaimanapun, penukaran daripada penuding-ke-penunjuk-ke-bukan-const kepada penuding-ke-penunjuk-ke-konst tidak dibenarkan. Ini menimbulkan persoalan: mengapa?

Untuk memahami alasan di sebalik sekatan ini, kita mesti mempertimbangkan penyahrujukan penunjuk. Apabila menyahrujuk penuding ke penuding, ia mewakili mengakses nilai yang ditunjuk oleh penuding paling dalam. Sebagai contoh, pertimbangkan kod:

int i = 10;
int *ptr = &i;
int **pptr = &ptr;

Di sini, **pptr bersamaan dengan *ptr, iaitu nilai i.

Walau bagaimanapun, jika kita membenarkan penukaran kepada penuding-ke-penunjuk-ke-konst, operasi penyahrujukan yang serupa akan menghasilkan nilai malar. Ini akan memperkenalkan ketidakkonsistenan, memecahkan ketidakbolehubah penunjuk const. Contohnya:

char *s1 = 0;
const char *s2 = s1; // OK...
char *a[MAX]; // aka char **
const char **ps = a;  // Error!

Di sini, s2 ialah penunjuk const, bermakna ia tidak boleh menunjuk kepada perkara lain. Walau bagaimanapun, jika ps dibenarkan, kami berpotensi membatalkan rujukannya untuk mendapatkan a, kemudian mengubah suai nilai a, dengan berkesan mengubah nilai yang ditunjukkan oleh s2, yang dilarang.

Oleh itu, untuk mengekalkan integriti const penunjuk, bahasa melarang penukaran daripada penuding-ke-penunjuk-ke-bukan-konst kepada penuding-ke-penunjuk-ke-konst. Ini memastikan bahawa kebolehubah penunjuk const dipelihara, menghalang pengubahsuaian yang tidak disengajakan kepada nilai malar.

Atas ialah kandungan terperinci Mengapakah Menukar Penunjuk-ke-Penunjuk-ke-Bukan-konst kepada Penunjuk-ke-Penunjuk-ke-konst Dilarang dalam 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