Rumah >pembangunan bahagian belakang >C++ >Mengapakah Nama Fungsi Setara dengan Penunjuk Fungsi dengan Alamat-Operator dalam C?

Mengapakah Nama Fungsi Setara dengan Penunjuk Fungsi dengan Alamat-Operator dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-11-15 07:27:02708semak imbas

Why are Function Names Equivalent to Function Pointers with the Address-of Operator in C?

Mengapa Nama Fungsi Bersamaan dengan Penunjuk Fungsi dengan Alamat-Pengendali?

Dalam pengaturcaraan C, menggunakan nama fungsi sebagai penuding fungsi adalah bersamaan dengan menggunakan alamat-pengendali (&) pada nama fungsi. Ketidakselarasan yang kelihatan ini dengan unsur bahasa lain, seperti tatasusunan, mempunyai rasional tertentu.

Rasional Kesetaraan Nama Fungsi

Menurut dokumen Rasional ANSI C90, kesetaraan antara penunjuk fungsi (nama fungsi) dan penunjuk fungsi telah diperkenalkan untuk meningkatkan kemudahan. Dengan membenarkan kedua-dua notasi, bahasa menyediakan cara ringkas untuk memanggil fungsi ahli dalam struktur berpakej. Contohnya:

graphics.open(file) // Equivalent to (*graphics.open)(file)

Keingintahuan Penentu Fungsi

Persamaan ini membawa kepada bentuk sintaksis yang pelik tetapi sah:

( &f)(); f(); (*f)(); (**f)(); (***f)();
pf(); (*pf)(); (**pf)(); (***pf)();

Jawatankuasa memberi alasan bahawa melarang borang seperti (f)() sambil membenarkan a (untuk int a[]) adalah tidak perlu dan menyusahkan.

Pengecualian dalam Parameter dan Jenis Pulangan

Menariknya, jenis fungsi boleh ditukar secara tersirat kepada penuding kepada dirinya sendiri sebagai parameter (cth., void g(FunctionType)). Walau bagaimanapun, ia tidak boleh ditukar kepada penunjuk apabila digunakan sebagai jenis pulangan (cth., FunctionType h();). Perbezaan ini memastikan isu keserasian jenis fungsi dapat dielakkan.

Atas ialah kandungan terperinci Mengapakah Nama Fungsi Setara dengan Penunjuk Fungsi dengan Alamat-Operator dalam C?. 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