Mengapa pembolehubah pemalar yang diubah suai mengekalkan nilai asalnya pada masa penyusunan, walaupun penunjuk bukan const membenarkan pengubahsuaian nilai sebenarnya?

Mary-Kate Olsen
Lepaskan: 2024-11-01 19:33:02
asal
468 orang telah melayarinya

Why does a modified constant variable retain its original value at compile time, even though a non-const pointer allows for modification of its actual value?

Mengubah suai Pemalar melalui Penunjuk Bukan Const

Dalam kod yang diberikan, pembolehubah pemalar e dimulakan kepada 2. Bukan- const pointer w kemudiannya dilemparkan untuk menunjuk ke alamat e, secara tersirat mengalih keluar const-ness pembolehubah. Dengan membatalkan rujukan w dan memberikan nilai baharu kepadanya, nilai pada alamat e diubah suai daripada 2 kepada 5.

Walau bagaimanapun, apabila nilai *w dan e dicetak, ia kelihatan berbeza:

<code class="cpp">cout << *w << endl; // Outputs 5
cout << e << endl; // Outputs 2</code>
Salin selepas log masuk

Tingkah laku ini boleh dijelaskan dengan mempertimbangkan cara berbeza di mana *w dan e dinilai:

  • *w sedang dinilai pada masa jalan: The pengkompil mengiktiraf bahawa *w ialah penunjuk bukan const dan secara dinamik mendapatkan semula nilai pada alamat yang ditunjuk oleh w. Memandangkan nilai pada alamat itu telah diubah suai kepada 5, *w mengeluarkan 5 dengan betul.
  • e sedang dianggap sebagai pemalar masa penyusunan: Pengkompil mengiktiraf bahawa e ialah pembolehubah malar dan menilai nilainya pada masa penyusunan. Memandangkan nilai e tidak diubah suai pada masa penyusunan, pengkompil terus menganggapnya sebagai 2.

Oleh itu, perbezaan dalam nilai timbul daripada masa penilaian yang berbeza bagi *w dan e. Walaupun pengubahsuaian kepada nilai pada alamat e, pembolehubah malar itu sendiri kekal tidak diubah suai pada masa penyusunan. Walau bagaimanapun, penunjuk bukan const w membenarkan pengubahsuaian nilai pada alamat yang ditunjukkannya, menghasilkan output 5 untuk *w.

Atas ialah kandungan terperinci Mengapa pembolehubah pemalar yang diubah suai mengekalkan nilai asalnya pada masa penyusunan, walaupun penunjuk bukan const membenarkan pengubahsuaian nilai sebenarnya?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!