Rumah >pembangunan bahagian belakang >C++ >Mengapa Alamat Pembolehubah Char Tidak Dipaparkan dengan Betul dalam C?
Mengapa Alamat Data Char Tidak Dipaparkan?
Pertimbangkan kod ini:
class Address { public: int i; char b; string c; void showMap(); }; void Address::showMap() { cout << "address of int : " << &i << endl; cout << "address of char : " << &b << endl; cout << "address of string : " << &c << endl; }
Apabila menjalankan kod ini , anda mungkin perasan bahawa alamat pembolehubah char 'b' tidak dipaparkan dalam output. Sebaliknya, anda melihat kawasan kosong. Mengapa ini berlaku?
Puncanya terletak pada cara alamat-pengendali (&) berfungsi dengan jenis data yang berbeza. Apabila digunakan pada pembolehubah char, &b, anda memperoleh penunjuk char, iaitu, char *.
Secara lalai, operator output << mentafsir char* ini sebagai rentetan gaya C dan cuba mencetak jujukan aksara. Walau bagaimanapun, dalam kes ini, kami hanya mahu memaparkan alamat pembolehubah char, bukan nilainya.
Untuk menyelesaikan isu ini, anda boleh menggunakan pendekatan berikut:
cout << "address of char : " << (void *) &b << endl;
Di sini , kami menghantar alamat b ke void * sebelum menggunakannya dengan operator output. Ini memastikan bahawa pengendali menganggapnya sebagai penunjuk kepada lokasi memori, bukan urutan aksara.
Mengapa Perbezaan Antara Alamat 8?
Jika anda membuat pembolehubah ahli 'int', 'char', dan 'rentetan' awam, anda mungkin melihat satu lagi tingkah laku yang menarik. Perbezaan antara alamat 'int' dan 'rentetan' adalah secara konsisten 8. Ini kerana:
Apabila pengkompil memperuntukkan memori untuk ahli kelas, ia melakukannya dengan cara yang menjajarkan mereka dengan sempadan masing-masing. Dalam kes ini, pembolehubah char 'b' mengambil satu bait, meninggalkan 3 bait ruang yang tidak digunakan. Ruang ini kemudiannya diikuti oleh pembolehubah rentetan 'c', yang menjajarkan dengan sempadan 4-bait yang terdekat.
Hasilnya, perbezaan antara alamat '&c' dan '&b' ialah 1 ( untuk 'b') 3 (untuk ruang yang tidak digunakan) 4 (untuk penjajaran 4-bait bagi 'c') = 8.
Atas ialah kandungan terperinci Mengapa Alamat Pembolehubah Char Tidak Dipaparkan dengan Betul dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!