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
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!