uintptr_t
とその他の有用なデータ型
<inttypes.h> によって提供されるその他の型として、ポインタを格納するために十分な領域が確保できる符号付きおよび符号なし整数型があります。これらの型には、intptr_t
と uintptr_t
があります。さらに、intmax_t
および uintmax_t
という (ビット単位で) 最長の符号付きおよび符号なしデータ型があります。
uintptr_t
型をポインタ用の整数型として使用する方が、unsigned long
のような基本データ型を使用するよりも便利です。unsigned long
は、IPL32 と LP64 データ型モデルの両方でポインタと同じサイズですが、uintptr_t
を使用すると、uintptr_t
の定義を変更するだけで異なるデータ型モデルを使用できます。このため、他の多くのシステムに移植が可能となります。またこれによって、C
プログラムコード中に意図する処理をより明確に記述することができます。
intptr_t
と uintptr_t
型は、アドレス計算をする際にポインタをキャストするのに非常に役に立ちます。long
または unsigned long
の代わりにこれらを使用することができます。
通常は、uintptr_t
を使用してキャストする方が、intptr_t
を使用するよりも安全です。特に比較の場合はこの方法が安全です。