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
Lepaskan: 2025-01-01 02:42:09
asal
503 orang telah melayarinya

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

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

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!

sumber:php.cn
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