Bagaimana untuk Mencetak Penunjuk Fungsi dalam C Tanpa Menggunakannya?

Mary-Kate Olsen
Lepaskan: 2024-10-25 07:33:29
asal
912 orang telah melayarinya

How to Print a Function Pointer in C   Without Invoking It?

Mencetak Penunjuk Fungsi Tanpa Invocation

Apabila cuba mencetak fungsi tanpa kurungan (iaitu, sebagai f dan bukannya f()), seseorang mungkin menghadapi keputusan yang tidak dijangka seperti sentiasa mencetak nilai 1. Tingkah laku yang kelihatan paradoks ini berpunca daripada mekanisme asas yang terlibat.

Dalam kod yang disediakan, pernyataan cout << pr; sebenarnya tidak menggunakan fungsi pr. Sebaliknya, ia menghantar penuding fungsi pr ke cout. C secara tersirat mentafsir penuding ini sebagai nilai bool, dengan penuding bukan nol yang menilai kepada benar dan seterusnya mencetak sebagai 1.

Untuk mencetak penuding fungsi itu sendiri, seseorang mesti menghantarnya secara eksplisit ke penuding void* . Ini boleh dicapai dengan menggunakan ungkapan seperti cout << (void*)pr.

C 11 dan Function Pointer Overloading

Dengan kemunculan C 11, kaedah yang lebih mudah untuk mencetak penunjuk fungsi muncul. Melebihi << operator untuk penunjuk fungsi membolehkan output yang lebih bermaklumat. Sebagai contoh, seseorang boleh mentakrifkan lebihan beban yang mencetak alamat dan arity fungsi (bilangan argumen):

<code class="cpp">template <class RType, class ... ArgTypes>
std::ostream &amp; operator<<(std::ostream &amp; s, RType(*func)(ArgTypes...))
{
    return s << "(func_ptr=" << (void*)func << ")(num_args=" 
              << sizeof...(ArgTypes) << ")";
}
Salin selepas log masuk

Lebihan ini akan mencetak output dalam format (func_ptr=

) (num_args=< ;arity>).
Dengan menggunakan lebihan beban ini, seseorang boleh mendapatkan maklumat yang lebih terperinci tentang penunjuk fungsi apabila mencetaknya menggunakan cout.

Atas ialah kandungan terperinci Bagaimana untuk Mencetak Penunjuk Fungsi dalam C Tanpa Menggunakannya?. 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!