Rumah >pembangunan bahagian belakang >C++ >Mengapakah Mencetak Alamat Ahli Char dalam Kelas Kadang-kadang Kelihatan Kosong, dan Mengapa Terdapat Offset 8 Bait Apabila Tidak?

Mengapakah Mencetak Alamat Ahli Char dalam Kelas Kadang-kadang Kelihatan Kosong, dan Mengapa Terdapat Offset 8 Bait Apabila Tidak?

Susan Sarandon
Susan Sarandonasal
2024-12-20 07:50:101020semak imbas

Why Does Printing the Address of a Char Member in a Class Sometimes Appear Blank, and Why Is There an 8-Byte Offset When It's Not?

Alamat Anomali Paparan Data Char

Dalam atur cara yang mengandungi kelas dengan ahli data pelbagai jenis, int, aksara dan rentetan, pemerhatian yang tidak dijangka muncul apabila mencetak alamat ahli data ini. Semasa alamat int dan rentetan dipaparkan, alamat ahli data char kelihatan kosong.

Untuk menyelesaikan isu ini, pertimbangkan perwakilan asas jenis data char. Apabila anda memperoleh alamat pembolehubah char menggunakan operator &, anda memperoleh penunjuk ke char. Walau bagaimanapun, pengendali sisipan strim (<<) mentafsirkan penuding ini sebagai rentetan penamatan nol gaya C. Akibatnya, ia cuba mencetak rentetan yang dikaitkan dengan penuding, yang tidak wujud dalam kes ini.

Untuk membetulkan gelagat ini, hantar alamat pembolehubah char secara eksplisit ke penuding kosong menggunakan static_cast. Dengan berbuat demikian, anda mengarahkan pengendali sisipan strim untuk mentafsir nilai sebagai alamat dan bukannya rentetan.

<br>cout << "alamat char :" << static_cast<void *>(&b) << endl;<br>

Selain itu, apabila ahli data kelas diisytiharkan awam, sesuatu yang menarik berlaku. Alamat pembolehubah aksara kini dipaparkan, tetapi dengan ofset 8 bait berbanding dengan alamat pembolehubah int.

<br> ... int : sesuatu <br> .. . char : something_2<br> ... rentetan : something_3<br>

Menariknya, something_2 - sesuatu sentiasa 8. Ini berasal daripada padding yang digunakan pada ahli kelas untuk susun atur memori yang cekap. Pembolehubah aksara, walaupun hanya menduduki 1 bait, diperuntukkan 4 bait kerana keperluan penjajaran. Pelapik 3-bait ini mencipta offset yang diperhatikan.

Atas ialah kandungan terperinci Mengapakah Mencetak Alamat Ahli Char dalam Kelas Kadang-kadang Kelihatan Kosong, dan Mengapa Terdapat Offset 8 Bait Apabila Tidak?. 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