Rumah > pembangunan bahagian belakang > C++ > Mengapa Alamat Ahli C Char Saya Dicetak Kosong, dan Mengapa Terdapat Offset 8-Byte?

Mengapa Alamat Ahli C Char Saya Dicetak Kosong, dan Mengapa Terdapat Offset 8-Byte?

Susan Sarandon
Lepaskan: 2025-01-03 02:51:38
asal
840 orang telah melayarinya

Why Does My C   Char Member's Address Print Blank, and Why Is There an 8-Byte Offset?

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;
Salin selepas log masuk

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!

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