Bagaimana untuk Menghantar Penunjuk kepada Integer dengan Selamat dalam C Moden?

Barbara Streisand
Lepaskan: 2024-11-12 07:13:02
asal
406 orang telah melayarinya

How to Safely Cast Pointers to Integers in Modern C  ?

Mengirim Penunjuk kepada Integer: Pendekatan C Moden

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);
Salin selepas log masuk

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.

Pertimbangan untuk Keserasian

C 11 (dan seterusnya) Versi:

#include <cstdint>
std::uintptr_t i;
Salin selepas log masuk

Versi C 03:

extern "C" {
#include <stdint.h>
}

uintptr_t i;
Salin selepas log masuk

Versi C99:

#include <stdint.h>
uintptr_t i;
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan