2011-06-20 37 views
10

それは/usr/include/stdint.hで定義されています:intptr_tとは整数かポインタの型ですか?

typedef long int    intptr_t; 

は、それは、整数またはポインタの型ことになっていますか?

+0

@Chris Lutz、どうですか? 'man intptr_t'は何もしません。 –

+1

私は 'stdint.h'のマンページがあると思います。そして、常にGoogleがあります。 –

答えて

21

これは、ポインタを保持するのに十分な大きさの符号付き整数型です。

+3

価値があると指摘しているのは、32ビットと64ビットのプラットフォーム上でおそらく異なるサイズになると指摘している... – Goz

+1

ポインタ/ポインタ/ – ninjalj

+0

好奇心の邪魔をしているのはなぜですか? [u] intptr_tの署名付きバージョンと符号なしバージョンを持っていますか? – JohnTortugo

1

符号付き整数型で、void*タイプを保持できることが保証されています。

また、なぜ[u]intptr_tもありますか?なぜなら:

voidへの任意の有効なポインタが値に変化はないとintptr_tまたはuintptr_t とバックに変換することができます。 C標準 は、voidへのポインタがオブジェクトタイプへの ポインタへの変換、またはそれから戻って変換され、その結果が と元のポインタとの比較が必要であることを保証します。したがって、uintptr_tをサポートする実装では、への を直接char *ポインタからuintptr_tに変換することは許可されています。

+0

これはどこから引用されていますか? – Yotam

+1

あなたは私を持っています。ここに:https://www.securecoding.cert.org/confluence/display/c/INT36-C.+Converting+a+pointer+to+integer+or+integer+to+pointer –

関連する問題