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
Patricia Arquetteasal
2024-11-12 10:52:02707semak imbas

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);

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:
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