Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh menukar penuding void* kepada integer dalam C dengan selamat?

Bagaimanakah saya boleh menukar penuding void* kepada integer dalam C dengan selamat?

Patricia Arquette
Lepaskan: 2024-11-12 10:52:02
asal
747 orang telah melayarinya

How can I safely convert a void* pointer to an integer in C  ?

Menukar Penunjuk kepada Integer

Dalam situasi di mana hujah void* perlu ditukar kepada jenis yang sesuai, adalah penting untuk memastikan keserasian merentas seni bina mesin yang berbeza.

Pada mesin 64-bit, menghantar kekosongan* kepada int boleh mengakibatkan kehilangan ketepatan. Untuk menangani perkara ini, pendekatan C moden melibatkan penggunaan reinterpret_cast. Ini memastikan penukaran mudah alih dan cekap.

Jenis Integer Betul:

Untuk menyimpan penuding sebagai integer dengan betul, jenis yang sesuai ialah uintptr_t atau intptr_t, ditakrifkan dalam < ;stdint.h> untuk C99 atau ruang nama std untuk C 11.

  • C 11 (dan seterusnya): std::uintptr_t
  • C 03: uintptr_t (dibalut dengan "C" luar { jika perlu })
  • C99: uintptr_t

Operator Casting Betul:

Dalam C , reinterpret_cast ialah cast pilihan untuk penukaran penuding. Elakkan menggunakan pelakon C.

Contoh:

#include <cstdint>

void *p;
std::uintptr_t i = reinterpret_cast<std::uintptr_t>(p);
Salin selepas log masuk

Soalan Berkaitan:

  • Apakah itu uintptr_t jenis data?

Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar penuding void* kepada integer dalam C dengan selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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