Rumah >pembangunan bahagian belakang >C++ >Mengapa Pembolehubah pada Alamat Memori yang Sama Menghasilkan Nilai Berbeza dalam C?
Pembolehubah dengan Alamat Sama Mengeluarkan Nilai Berbeza
Pertimbangkan coretan kod berikut:
const int a1 = 40; const int* b1 = &a1; char* c1 = (char *)(b1); *c1 = 'A'; int *t = (int*)c1; cout << a1 << " " << *t << endl; cout << &a1 << " " << t << endl;
Anehnya, kod ini output:
40 65 0xbfacbe8c 0xbfacbe8c
Bagaimana keadaannya mungkin pembolehubah pada alamat yang sama (c1 dan t) menghasilkan dua nilai yang berbeza ('A' dan 65)?
Penjelasan terletak pada sifat tingkah laku yang tidak ditentukan. Dalam kes ini, pengubahsuaian pembolehubah malar (*c1) mencetuskan tingkah laku yang tidak ditentukan. Mengikut piawaian C, gelagat yang tidak ditentukan boleh mengakibatkan hasil yang tidak dapat diramalkan, daripada penamatan program kepada gelagat yang didokumenkan (dengan atau tanpa mesej diagnostik).
Dalam contoh khusus ini, gelagat yang tidak ditentukan membolehkan pengkompil mengoptimumkan kod dalam cara yang tidak dijangka. Dengan mengubah suai pembolehubah malar, pengkompil secara berkesan mengatasi nilai asal a1. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tingkah laku ini tidak dijamin dan mungkin berbeza-beza merentasi penyusun dan persekitaran yang berbeza.
Oleh itu, apabila bekerja dengan pembolehubah dan penunjuk malar, adalah penting untuk mengelak daripada mengubah suai pembolehubah ini untuk memastikan program boleh diramal tingkah laku.
Atas ialah kandungan terperinci Mengapa Pembolehubah pada Alamat Memori yang Sama Menghasilkan Nilai Berbeza dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!