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!