Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah `cout` memutuskan sama ada untuk mencetak alamat atau rentetan apabila anda melepasi penunjuk aksara?
Memahami Lebihan Operator Strim untuk Penunjuk Char
Apabila mencetak penunjuk aksara menggunakan printf(), penentu penukaran menentukan sama ada alamat atau rentetan dicetak, seperti %u untuk alamat atau %s untuk rentetan. Walau bagaimanapun, dengan aliran C dan cout, bagaimanakah ia menentukan yang mana satu untuk dikeluarkan?
Pertimbangkan kod berikut:
<code class="cpp">char ch = 'a'; char *cptr = &ch; cout << cptr << endl;
Dalam contoh ini, cout cuba mentafsir cptr sebagai rentetan. Untuk mencetak alamat ch menggunakan cout, penukaran mesti digunakan untuk menyelesaikan kekaburan ini.
Penyelesaian: Menghantar ke Penunjuk Tidak Sah
Kaedah pilihan untuk mendapatkan alamat menggunakan cout adalah melalui jenis casting. Pendekatan yang betul ialah:
<code class="cpp">cout << static_cast<void *>(cptr) << endl;</code>
Dengan menghantar cptr kepada void *, kami memaksa cout untuk melaksanakan beban lampau yang sesuai yang mengambil penunjuk void (ostream& operator<< (ostream& o, const void *p )). Ini memastikan alamat dicetak seperti yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimanakah `cout` memutuskan sama ada untuk mencetak alamat atau rentetan apabila anda melepasi penunjuk aksara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!