Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `cout` mencetak aksara dan bukannya alamat apabila bekerja dengan penunjuk aksara?
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.
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!