Apabila memindahkan kod ke mesin 64-bit, adalah perlu untuk menangani isu yang berkaitan dengan penukaran penunjuk. Dalam fungsi dengan hujah void, apabila hujah dibuang ke jenis yang sesuai dalam fungsi, ralat berikut mungkin timbul: "cast from 'void' to 'int' loses precision."
Untuk menyelesaikan isu ini dan memastikan keserasian merentas mesin 32-bit dan 64-bit, pendekatan C 11 berikut disyorkan:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
Jenis std::uintptr_t direka khusus untuk mewakili nilai penunjuk dan alamat. Menggunakan reinterpret_cast memastikan penukaran yang selamat dan jelas antara penuding void* dan perwakilan integer.
C 11 (dan seterusnya) Versi:
#include <cstdint> std::uintptr_t i;
Versi C 03:
extern "C" { #include <stdint.h> } uintptr_t i;
Versi C99:
#include <stdint.h> uintptr_t i;
Adalah penting untuk ambil perhatian bahawa semasa uintptr_t menyediakan cara yang selamat untuk menyimpan nilai penunjuk sebagai integer, ia mungkin tidak semestinya sejajar dengan saiz integer dalam semua kes. Oleh itu, adalah disyorkan untuk menggunakan jenis yang sesuai untuk menyimpan dan memanipulasi nilai integer.
Atas ialah kandungan terperinci Bagaimana untuk Menghantar Penunjuk kepada Integer dengan Selamat dalam C Moden?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!