コードを 64 ビット マシンに移行する場合、ポインタ変換に関連する問題に対処する必要があります。 void 引数を持つ関数では、引数が関数内で適切な型にキャストされ、次のエラーが発生する可能性があります: 「'void' から 'int' へのキャストは精度を失います。」
この問題を解決し、32 ビットと 64 ビットのマシン間の互換性を確保するには、次の C 11 アプローチを使用します。推奨:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
std::uintptr_t 型は、ポインター値とアドレスを表すために特別に設計されています。 reinterpret_cast を使用すると、void* ポインターと整数表現間の安全かつ明示的な変換が保証されます。
C 11 (以降) バージョン:
#include <cstdint> std::uintptr_t i;
C 03バージョン:
extern "C" { #include <stdint.h> } uintptr_t i;
C99 バージョン:
#include <stdint.h> uintptr_t i;
uintptr_t はポインター値を整数として保存する安全な方法を提供することに注意することが重要です。すべての場合において、必ずしも整数のサイズと一致するとは限りません。したがって、整数値の保存と操作には適切な型を使用することをお勧めします。
以上が最新の C でポインタを整数に安全にキャストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。