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
Lepaskan: 2024-12-30 02:38:09
asal
969 orang telah melayarinya

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan