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

Patricia Arquette
Lepaskan: 2024-11-15 07:27:02
asal
633 orang telah melayarinya

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 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)
Salin selepas log masuk

Keingintahuan Penentu Fungsi

Persamaan ini membawa kepada bentuk sintaksis yang pelik tetapi sah:

( &f)(); f(); (*f)(); (**f)(); (***f)();
pf(); (*pf)(); (**pf)(); (***pf)();
Salin selepas log masuk

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

Pengecualian dalam Parameter dan Jenis Pulangan

Menariknya, jenis fungsi boleh secara tersirat ditukar 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!

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