Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `cout` mencetak aksara dan bukannya alamat apabila bekerja dengan penunjuk aksara?

Mengapakah `cout` mencetak aksara dan bukannya alamat apabila bekerja dengan penunjuk aksara?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-04 04:52:02583semak imbas

Why does `cout` print the character instead of the address when working with char pointers?

Memahami Pencetakan Penunjuk Char dengan cout

Apabila berurusan dengan penunjuk char, adalah penting untuk memahami cara ia dikendalikan dalam persekitaran yang berbeza. Walaupun print() dengan penentu penukaran %u dan %s memberikan kawalan ke atas alamat pencetakan atau rentetan, cabaran timbul apabila menggunakan cout.

Pertimbangkan coretan kod berikut:

<code class="cpp">char ch = 'a';
char *cptr = &ch;
cout << cptr << endl;

Di sini, output yang dikehendaki ialah alamat ch yang disimpan dalam cptr. Walau bagaimanapun, secara lalai, cout akan cenderung untuk menganggap cptr sebagai rentetan biasa dan mencetak aksara 'a' dan bukannya alamatnya.

Menyelesaikan Dilema Pencetakan

Untuk membetulkan isu ini, kita perlu untuk memaksa cout mentafsir cptr sebagai penunjuk kosong dan bukannya penunjuk char. Ini membolehkan kami memanfaatkan operator ostream& yang secara khusus mengendalikan penunjuk tidak sah dan mencetak alamat mereka.

Untuk mencapai ini, kami boleh menggunakan cast seperti berikut:

<code class="cpp">cout << static_cast<void *>(cptr) << endl;</code>

Dengan menghantar cptr ke penunjuk tidak sah, resolusi beban lampau memilih operator yang betul, menghasilkan pencetakan alamat yang diingini.

Atas ialah kandungan terperinci Mengapakah `cout` mencetak aksara dan bukannya alamat apabila bekerja dengan penunjuk aksara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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