- ベストアンサー
アドレス値はどの型にキャストすればよいでしょうか?
環境はWindows32bitです。 できれば64bitにも対応した型が知りたいです。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
補足を見ると、「アドレス値はどの型にキャストすればよいでしょうか? 」は間違いで、 アドレス値を整数型変数に入れたいが、その変数の型名に何を使えばいいか? ですね。 ISO/ANSI/JIS規格だと、intptr_t 。符号無し整数なら uintptr_t です。 JISだと、下記に書いてあります。 7.18.1.4 オブジェクトを指すポインタを保持可能な整数型 サンプル: #include <stdio.h> #include <stdint.h> main(){ char *p = "ABC"; intptr_t address = (intptr_t)p; printf("%X\n",address); printf("%p\n",p); }
その他の回答 (7)
- ICE_FALCON
- ベストアンサー率56% (63/111)
どうしてもキャストしたいならsize_t型かな・・・
- qwertfk
- ベストアンサー率67% (55/81)
intptr_t uintptr_t で32/64bit対応できるはず。 int i = 0; uintptr_t ptr = (uintptr_t)&i;
- a_kwn
- ベストアンサー率34% (8/23)
INT_PTR, UINT_PTR, intptr_t, uintptr_t ぐらいが浮かびますが・・・。 あなたの開発環境にも、これに類したものがあるとおもいますので、 適切なものを使ってください。
- kmee
- ベストアンサー率55% (1857/3366)
一応書いておくと sizeofでポインタと各整数型の大きさを調べるのが確実です。
- kmee
- ベストアンサー率55% (1857/3366)
WIndowsで普通のプログラミングしているかぎり、ポインタを数値にして使う場面はまず無いと思うのですが。 ポインタをポインタのまま使ってなにか不都合でもあるのでしょうか?
お礼
回答ありがとうございました。
キャストを日本語に訳すと「型変換」となるので、何らかの型変換処理が行われると思いがちですが、キャストとはコンパイラに対する命令(?)なので、簡単に言えば「型をだます」だけで、何かが変わるわけではありません。 ですから、たとえば代入であればキャストするのは代入先の型に合わせるだけです。 代入元は、アドレス値であろうが整数値であろうが、何でもいいのです。
補足
代入先の型はintでいいのでしょうか?環境によって切り捨てられてしまわないでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
質問の意味が分かりません. そのまま「ポインタ」として使ってはいけないのですか?
補足
ポインタが指しているアドレスを使いたいのです。
お礼
回答ありがとうございました。 またすこし理解が深まりました。