Umwandeln eines Zeigers in eine Ganzzahl: Überarbeitet für 64-Bit-Maschinen
In C/C eine potenzielle Gefahr beim Umgang mit 64-Bit-Maschinen Bitmaschinen entstehen beim Umgang mit Zeigern. Herkömmliche Konvertierungstechniken, wie die unten gezeigte, können zu Präzisionsfehlern führen:
void function(MESSAGE_ID id, void* param) { if (id == FOO) { int real_param = (int)param; // ... } }
Lösung mit aktualisierten Gusstechniken
Um dieses Problem zu beheben und eine nahtlose Herstellung zu gewährleisten Kompatibilität sowohl auf 32-Bit- als auch auf 64-Bit-Systemen wird ein moderner C-Ansatz empfohlen:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
Auswahl des richtigen Datentyps
Beim Speichern eines Zeigers als Da es sich um eine Ganzzahl handelt, ist die Auswahl des geeigneten Datentyps von entscheidender Bedeutung. Für diesen Zweck ist der Typ uintptr_t am besten geeignet.
// C++11 std::uintptr_t i; // C++03 extern "C" { #include <stdint.h> } uintptr_t i; // C99 #include <stdint.h> uintptr_t i;
Einsatz des richtigen Casting-Operators
In C gibt es verschiedene Arten von Casts. Für dieses spezielle Szenario ist reinterpret_cast die am besten geeignete Wahl.
// C++11 auto i = reinterpret_cast<std::uintptr_t>(p); // C++03 uintptr_t i = reinterpret_cast<uintptr_t>(p); // C uintptr_t i = (uintptr_t)p;
Das obige ist der detaillierte Inhalt vonWie kann ich einen Zeiger auf 64-Bit-Maschinen sicher in eine Ganzzahl umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!