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!