Rumah > pembangunan bahagian belakang > C++ > Mengapa Nama Fungsi dan Penunjuk Fungsi Setara dalam C ?

Mengapa Nama Fungsi dan Penunjuk Fungsi Setara dalam C ?

Barbara Streisand
Lepaskan: 2024-11-12 21:09:01
asal
679 orang telah melayarinya

Why are Function Names and Function Pointers Equivalent in C  ?

Persamaan Nama Fungsi dengan Penunjuk Fungsi

Nama fungsi dalam C berfungsi sebagai penunjuk fungsi dan penunjuk fungsi, menyediakan trengkas yang mudah untuk fungsi rujukan . Persamaan ini telah dibahaskan dan rasionalnya terletak pada pertimbangan sejarah dan keinginan untuk memudahkan penggunaan penunjuk fungsi.

Dokumen Rasional C90 menerangkan bahawa penentu fungsi boleh digunakan dalam pelbagai bentuk, termasuk sebagai panggilan fungsi (kedua-duanya dengan dan tanpa pengendali asterisk) dan sebagai penunjuk fungsi. Fleksibiliti ini membolehkan pelbagai pembinaan sintaksis, sesetengah daripadanya mungkin kelihatan luar biasa.

Sebagai contoh, pertimbangkan pengisytiharan berikut:

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

Di sini, nama fungsi f boleh dipanggil sebagai f( ), *f(), atau pun ***f(). Selain itu, penunjuk fungsi pf boleh dipanggil dengan cara yang sama, seperti pf(), *pf(), atau **pf().

Rasional untuk kesetaraan ini berpunca daripada keinginan untuk memudahkan penggunaan daripada penunjuk fungsi. Dalam kebanyakan kes, adalah lebih mudah untuk menggunakan nama fungsi secara langsung sebagai penunjuk fungsi daripada perlu menggunakan alamat pengendali (&) secara manual. Oleh itu, bahasa membenarkan kesetaraan nama fungsi dan penunjuk fungsi.

Walau bagaimanapun, kesetaraan ini terhad kepada konteks tertentu. Apabila mengembalikan jenis fungsi, jenis fungsi itu sendiri tidak boleh ditukar secara tersirat kepada penuding kepada dirinya sendiri. Ini digambarkan dalam contoh di bawah:

typedef bool FunctionType(int);
FunctionType h(); // Error!
Salin selepas log masuk

Dalam kes ini, h() diisytiharkan sebagai fungsi yang mengembalikan jenis fungsi, tetapi ini tidak boleh ditukar secara tersirat kepada penuding kepada jenis fungsi tersebut. Walau bagaimanapun, apabila digunakan sebagai parameter, jenis fungsi boleh ditukar secara tersirat kepada penuding kepada dirinya sendiri.

FunctionType g(FunctionType); // Implicitly converted to void g(FunctionType *)
Salin selepas log masuk

Penukaran tersirat ini memudahkan penghantaran penunjuk fungsi sebagai parameter. Secara keseluruhan, kesetaraan nama fungsi dan penunjuk fungsi ialah pilihan reka bentuk yang mengimbangi kemudahan dengan sekatan kontekstual, menjadikannya ciri praktikal dalam pengaturcaraan C.

Atas ialah kandungan terperinci Mengapa Nama Fungsi dan Penunjuk Fungsi Setara 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