Rumah >pembangunan bahagian belakang >C++ >Bagaimana Saya Mencetak Penunjuk Fungsi dalam C Menggunakan `cout` dan `printf`?

Bagaimana Saya Mencetak Penunjuk Fungsi dalam C Menggunakan `cout` dan `printf`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 22:33:11194semak imbas

How Do I Print Function Pointers in C   Using `cout` and `printf`?

Mencetak Penunjuk Fungsi dengan cout dan printf

Dalam C , penunjuk fungsi boleh dicetak menggunakan cout atau printf, tetapi dengan tingkah laku berbeza bergantung pada penentu format yang digunakan.

cout Operator

Secara lalai, cout menganggap penunjuk fungsi sebagai nilai boolean dan mencetak 1 untuk penunjuk bukan nol dan 0 untuk penunjuk nol. Untuk mencetak alamat sebenar, ia mesti dibuang secara eksplisit ke void*:

cout << (void *)pf;

Fungsi printf

Apabila menggunakan printf dengan penentu format %p, penunjuk fungsi dianggap sebagai penunjuk dan alamatnya dicetak heksadesimal:

printf("%p", pf);

Penunjuk Fungsi sebagai Boolean

Penunjuk fungsi sememangnya dianggap sebagai boolean dalam C . Ini disebabkan oleh peraturan penukaran boolean yang membenarkan penuding dihantar ke bool, di mana penuding bukan nol menilai kepada benar dan penuding nol kepada palsu. Tingkah laku ini boleh berlaku di luar jangkaan jika tidak diambil kira.

Penunjuk Fungsi Ahli

Mencetak penunjuk fungsi ahli adalah lebih kompleks kerana ia bukan penunjuk mudah. Walau bagaimanapun, adalah mungkin untuk mencetak alamat fungsi ahli menggunakan helah:

cout << (void *)(*(int **)&pf);

Ini mengambil kesempatan daripada fakta bahawa alamat fungsi ahli disimpan dalam elemen kedua penuding fungsi dan menghantar ia terbatal*.

Atas ialah kandungan terperinci Bagaimana Saya Mencetak Penunjuk Fungsi dalam C Menggunakan `cout` dan `printf`?. 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