Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `cout` memutuskan sama ada untuk mencetak alamat atau rentetan apabila anda melepasi penunjuk aksara?

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
389 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!

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