Bagaimanakah `cout` memutuskan sama ada untuk mencetak alamat atau rentetan apabila anda melepasi penunjuk aksara?

Susan Sarandon
Lepaskan: 2024-11-04 10:23:31
asal
231 orang telah melayarinya

How does `cout` decide whether to print the address or the string when you pass a character pointer?

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!