Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Menukar Penunjuk-ke-Penunjuk kepada Bukan-Const kepada Penunjuk-ke-Penunjuk kepada Const dalam C ?

Mengapa Saya Tidak Boleh Menukar Penunjuk-ke-Penunjuk kepada Bukan-Const kepada Penunjuk-ke-Penunjuk kepada Const dalam C ?

Susan Sarandon
Susan Sarandonasal
2025-01-01 02:42:09530semak imbas

Why Can't I Convert a Pointer-to-Pointer to Non-Const to a Pointer-to-Pointer to Const in C  ?

Menukar Penunjuk: Mengapa Sekatan terhadap Penukaran Penunjuk ke Penunjuk?

Dalam C , secara amnya dibenarkan menghantar penuding kepada bukan -jenis const kepada penunjuk kepada jenis const. Ini mengikut prinsip "const-correctness", membenarkan hanya data malar diubah suai.

Walau bagaimanapun, satu pengecualian pelik timbul apabila berurusan dengan penunjuk kepada penunjuk. Tidak seperti penukaran yang disebutkan di atas, adalah dilarang untuk menukar "penunjuk kepada penuding kepada bukan const" kepada "penunjuk kepada penuding kepada const."

Pertimbangkan coretan kod ini:

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

Mengapa adakah penugasan a to ps haram? Jawapannya terletak pada standard:

const char c = 'c';
char* pc;
const char** pcc = &pc;   // not allowed
*pcc = &c;
*pc = 'C';                // would allow to modify a const object

Dalam contoh ini:

  1. c ialah watak tetap.
  2. pc ialah penunjuk bukan const kepada a watak.
  3. Percubaan untuk memulakan pcc (penunjuk kepada penuding kepada const) dengan &pc ialah tidak dibenarkan.

Jika penukaran ini dibenarkan, ia akan membolehkan pengubahsuaian pada objek tetap. Sebagai contoh, *pcc akan menunjuk kepada aksara const, tetapi *pc akan boleh diubah suai. Ini melanggar premis ketepatan const, kerana ia berpotensi membenarkan perubahan kepada data malar.

Oleh itu, sekatan untuk menukar penuding kepada penuding kepada bukan const kepada penuding kepada penuding kepada const berpunca daripada keperluan untuk mengekalkan integriti objek malar dan mengelakkan pengubahsuaian data yang tidak diingini.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menukar Penunjuk-ke-Penunjuk kepada Bukan-Const kepada Penunjuk-ke-Penunjuk kepada Const 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