Rumah > pembangunan bahagian belakang > C++ > Mengapakah Mengubah suai Alamat Memori Pembolehubah `const` Menunjukkan Nilai Berbeza?

Mengapakah Mengubah suai Alamat Memori Pembolehubah `const` Menunjukkan Nilai Berbeza?

Barbara Streisand
Lepaskan: 2024-12-20 18:58:10
asal
727 orang telah melayarinya

Why Does Modifying a `const` Variable's Memory Address Show Different Values?

Memahami Gelagat Alamat Memori dengan Pembolehubah dan Pemalar

Dalam coretan kod yang melibatkan pembolehubah const dan penunjuk kepadanya, pemerhatian yang berbeza nilai pada alamat memori yang sama meningkat soalan.

Kod Analisis

#include <iostream>
using namespace std;

int main() {
    const int N = 22;
    int * pN = const_cast<int*>(&N);
    *pN = 33;
    cout << N << '\t' << &N << endl;
    cout << *pN << '\t' << pN << endl;
}
Salin selepas log masuk

Output

22      0x22ff74

33      0x22ff74
Salin selepas log masuk

Soalan

amati dua nilai yang berbeza (22 dan 33) pada masa yang sama alamat memori (0x22ff74)?

Jawapan

Bertentangan dengan pemerhatian, tidak ada dua nilai berbeza yang disimpan pada alamat memori yang sama. Ini adalah hasil daripada pengoptimuman pengkompil.

Pengkompil mempunyai kuasa untuk merawat sebarang sebutan pembolehubah const seolah-olah nilai masa kompilasi pembolehubah digunakan secara langsung. Dalam kod ini, pengkompil melihat kod sebagai:
int * pN = const_cast<int*>(&22);
*pN = 33;
Salin selepas log masuk

Pengkompil mempunyai haknya untuk menggunakan pengoptimuman ini. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pengkompil tidak terhad kepada tindakan ini. Ia mungkin menggunakan pengoptimuman lain, termasuk yang berpotensi memadamkan data pada pemacu keras anda jika anda terlibat dalam amalan berisiko seperti mengubah suai memori yang dikaitkan dengan pembolehubah const.

Atas ialah kandungan terperinci Mengapakah Mengubah suai Alamat Memori Pembolehubah `const` Menunjukkan Nilai Berbeza?. 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