Penyahpepijatan Pencetakan Alamat Keanehan
Dalam program C yang melibatkan kelas dengan ahli data int, char dan rentetan, mencetak alamat mereka menimbulkan kening. Apabila mengakses ahli char, output secara misteri kekal kosong. Selain itu, menghantar ahli char awam kepada penunjuk tidak sah mendedahkan offset 8, mendorong penyiasatan lanjut.
Alamat Char yang hilang:
Isu dengan alamat char kosong output berpunca daripada cara & operator ditafsirkan. Secara lalai, menggunakan & pada pembolehubah char mengembalikan penunjuk kepada rentetan gaya C (char). Ini menyebabkan beban berlebihan << operator untuk aliran rentetan untuk menganggap pembolehubah sebagai tatasusunan aksara dan mencetaknya sebagai rentetan, bukannya alamatnya.
Menyelesaikan Isu:
Untuk mencetak alamat ahli char dengan betul, hantaran eksplisit untuk batal* diperlukan. Barisan ini menunjukkan bahawa penunjuk harus dianggap sebagai penunjuk generik, menghalang << operator daripada mentafsirkannya sebagai rentetan C. Kod yang diperbetulkan:
cout << "address of char :" << (void*) &b << endl;
Sebagai alternatif, menggunakan static_cast ialah kaedah yang lebih selamat dan pilihan untuk menghantar penunjuk dalam C moden :
cout << "address of char :" << static_cast( &b ) << endl; Offset 8 dalam Ahli Awam:
Apabila ahli int, aksara dan rentetan terbuka, pengimbangan antara alamat ahli char dan rentetan sentiasa 8. Ini kerana dalam kelas awam, pembolehubah ahli dibentangkan dalam struktur kelas mengikut susunan ia diisytiharkan. Oleh itu, ahli rentetan mengikuti ahli char pada offset tetap 8 bait.
Atas ialah kandungan terperinci Mengapa Alamat Ahli C Char Saya Dicetak Kosong, dan Mengapa Terdapat Offset 8-Byte?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!