ホームページ >バックエンド開発 >C++ >C で void* ポインターを整数に安全に変換するにはどうすればよいですか?

C で void* ポインターを整数に安全に変換するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-12 10:52:02700ブラウズ

How can I safely convert a void* pointer to an integer in C  ?

ポインタを整数に変換する

void* 引数を適切な型に変換する必要がある状況では、次のことが重要です。異なるマシン アーキテクチャ間の互換性を確保します。

64 ビット マシンでは、void* を int にキャストすると精度が失われる可能性があります。これに対処するために、最新の C アプローチでは reinterpret_cast<:uintptr_t> を使用します。これにより、移植可能で効率的な変換が保証されます。

正しい整数型:

ポインタを整数として正しく格納するには、< で定義されている適切な型は uintptr_t または intptr_t です。 ;stdint.h> C99 の場合、または C 11 の std 名前空間。

  • C 11 (以降): std::uintptr_t
  • C 03: uintptr_t (必要に応じて extern "C" { でラップ) })
  • C99: uintptr_t

正しいキャスト演算子:

C では、 reinterpret_cast がポインター変換の優先キャストです。 C キャストの使用は避けてください。

例:

#include <cstdint>

void *p;
std::uintptr_t i = reinterpret_cast<std::uintptr_t>(p);

関連質問:

  • とはuintptr_t データ型?

以上がC で void* ポインターを整数に安全に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。