Tuding Penunjuk Fungsi dalam C
Dalam C , menukar lompang* kepada penuding fungsi secara langsung secara amnya tidak dibenarkan. Walau bagaimanapun, terdapat beberapa pendekatan yang mungkin berfungsi bergantung pada pelaksanaan dan platform.
Kaedah 1 (Tingkah Laku Tidak Ditakrifkan):
Kaedah ini melibatkan double reinterpret_casting:
<code class="cpp">void *gptr = dlsym(some symbol..); typedef void (*fptr)(); fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
Kaedah 2 (Mengelakkan Penukaran Terus):
Kaedah ini menggunakan langkah perantaraan untuk menyimpan alamat penuding fungsi dalam pembolehubah:
<code class="cpp">fptr my_ptr = 0; reinterpret_cast<void*&>(my_ptr) = gptr;</code>
Versi Kaedah 2 yang Lebih Lambat tetapi Lebih Telus:
<code class="cpp">void (**object_ptr)() = &my_ptr; void ** ppv = reinterpret_cast<void**>(object_ptr); *ppv = gptr;</code>
Batasan dan Kaveat:
Nota:
Dalam C 0x, kelakuan menukar kekosongan* kepada penuding fungsi disokong secara bersyarat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar `kosong*` dengan Selamat kepada Penunjuk Fungsi dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!