Rumah >pembangunan bahagian belakang >C++ >Mengapa Kod C Saya Menunjukkan Alamat Kosong untuk Ahli `char` dan Alamat 8-Byte Perbezaan Antara Ahli `int` dan `string`?

Mengapa Kod C Saya Menunjukkan Alamat Kosong untuk Ahli `char` dan Alamat 8-Byte Perbezaan Antara Ahli `int` dan `string`?

DDD
DDDasal
2024-12-30 02:38:09986semak imbas

Why Does My C   Code Show an Empty Address for a `char` Member and an 8-Byte Address Difference Between `int` and `string` Members?

Alamat Percanggahan Paparan Data Aksara

Dalam kod C yang disediakan, output alamat untuk ahli kelas menunjukkan anomali: alamat ahli data char "b" dipaparkan sebagai ruang kosong.

Sebab kelakuan ini terletak pada cara alamat pengendali dan pengendali sisipan "<<" mentafsir jenis char. Apabila alamat "b" diperoleh, ia menghasilkan penunjuk char *. Pengendali sisipan, walau bagaimanapun, mentafsirkan ini sebagai rentetan gaya C dan cuba mencetak kandungannya dan bukannya alamatnya.

Untuk membetulkannya, alamat "b" boleh dibuang ke penunjuk yang kosong menggunakan sama ada lakonan gaya C seperti "(void ) &b" atau, sebaik-baiknya, alternatif yang lebih selamat seperti "static_cast(&b)". Ini memastikan bahawa alamat "b" dicetak dengan betul.

Misteri Perbezaan Alamat (String dan Char)

Pemerhatian lain ialah apabila ahli kelas int , char dan rentetan diisytiharkan sebagai awam, alamat "char" dipaparkan sebagai rentetan kosong, manakala perbezaan antara alamat "rentetan" dan "int" sentiasa 8 (bukan 9).

Perbezaan ini timbul daripada cara objek disimpan dalam ingatan. Jenis data rentetan dilaksanakan sebagai blok aksara bersebelahan, termasuk aksara nol penamat. Aksara null ini secara berkesan menambah bait tambahan kepada saiz rentetan.

Oleh itu, perbezaan antara alamat "rentetan" dan "int" ialah 8 bait, mewakili saiz jenis data rentetan ditambah satu untuk null-terminator. Sebaliknya, jenis data char tidak mempunyai penamat nol, menyebabkan paparan kosong apabila alamatnya dicetak.

Atas ialah kandungan terperinci Mengapa Kod C Saya Menunjukkan Alamat Kosong untuk Ahli `char` dan Alamat 8-Byte Perbezaan Antara Ahli `int` dan `string`?. 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