Bagaimanakah Saya Boleh Menukar Penunjuk Void kepada Penunjuk Fungsi dalam C?

DDD
Lepaskan: 2024-11-03 21:57:31
asal
441 orang telah melayarinya

How Can I Convert a Void Pointer to a Function Pointer in C  ?

Menghantar Penunjuk Fungsi dalam C

Jenis penukaran penunjuk tidak sah kepada penunjuk fungsi ialah senario biasa dalam pengaturcaraan. Walau bagaimanapun, dalam C , menukar kekosongan kepada penunjuk fungsi secara langsung adalah tidak dibenarkan, seperti yang ditakrifkan oleh piawaian C 98/03. Ini kerana kekosongan, mengikut piawaian, bertujuan untuk menunjuk ke objek, bukan penunjuk fungsi atau penunjuk ahli.

Walaupun pemutus terhad dalam piawaian C 98/03, terdapat cara untuk mencapai penukaran dalam konteks tertentu. Kaedah ini bergantung kepada pelaksanaan dan mungkin berkelakuan berbeza berdasarkan pengkompil dan sistem pengendalian.

Pilihan 1: Castan Tafsiran Semula Berganda

Satu pendekatan ialah menggunakan tafsiran semula berganda cast:

<code class="cpp">void *gptr = dlsym(some symbol...);
typedef void (*fptr)();
fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
Salin selepas log masuk

Di sini, gptr pertama kali dihantar ke integer panjang, dan kemudian hantaran dilakukan dari panjang kepada jenis penunjuk fungsi sasaran. Pendekatan ini tidak dijamin berfungsi merentas semua platform dan bukan sebahagian daripada standard C.

Pilihan 2: Void dan Manipulasi Alamat**

Kaedah alternatif melibatkan memanipulasi kekosongan** dan alamat:

<code class="cpp">fptr my_ptr = 0;
reinterpret_cast<void**&my_ptr = gptr;</code>
Salin selepas log masuk

Dalam kes ini, kekosongan digunakan untuk menyimpan alamat penuding fungsi. Dengan memberikan alamat dari gptr kepada void, alamat penuding fungsi boleh diakses secara tidak langsung. Kaedah ini juga bergantung kepada pelaksanaan.

Adalah penting untuk ambil perhatian bahawa teknik ini mengeksploitasi gelagat platform tertentu dan tidak ditakrifkan dengan baik oleh standard C. Walaupun ia mungkin berfungsi dalam kebanyakan kes, adalah penting untuk mengetahui kemungkinan ketidakkonsistenan dan isu mudah alih.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Penunjuk Void kepada Penunjuk Fungsi 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
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!