Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa pembolehubah pemalar yang diubah suai mengekalkan nilai asalnya pada masa penyusunan, walaupun penunjuk bukan const membenarkan pengubahsuaian nilai sebenarnya?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 19:33:02564semak imbas

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>

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!

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