• ベストアンサー

アドレス値はどの型にキャストすればよいでしょうか?

環境はWindows32bitです。 できれば64bitにも対応した型が知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.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)

回答No.7

どうしてもキャストしたいならsize_t型かな・・・

  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.6

intptr_t uintptr_t で32/64bit対応できるはず。 int i = 0; uintptr_t ptr = (uintptr_t)&i;

  • a_kwn
  • ベストアンサー率34% (8/23)
回答No.5

INT_PTR, UINT_PTR, intptr_t, uintptr_t ぐらいが浮かびますが・・・。 あなたの開発環境にも、これに類したものがあるとおもいますので、 適切なものを使ってください。

110110110110
質問者

お礼

回答ありがとうございました。 またすこし理解が深まりました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

一応書いておくと sizeofでポインタと各整数型の大きさを調べるのが確実です。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

WIndowsで普通のプログラミングしているかぎり、ポインタを数値にして使う場面はまず無いと思うのですが。 ポインタをポインタのまま使ってなにか不都合でもあるのでしょうか?

110110110110
質問者

お礼

回答ありがとうございました。

noname#140082
noname#140082
回答No.2

キャストを日本語に訳すと「型変換」となるので、何らかの型変換処理が行われると思いがちですが、キャストとはコンパイラに対する命令(?)なので、簡単に言えば「型をだます」だけで、何かが変わるわけではありません。 ですから、たとえば代入であればキャストするのは代入先の型に合わせるだけです。 代入元は、アドレス値であろうが整数値であろうが、何でもいいのです。

110110110110
質問者

補足

代入先の型はintでいいのでしょうか?環境によって切り捨てられてしまわないでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

質問の意味が分かりません. そのまま「ポインタ」として使ってはいけないのですか?

110110110110
質問者

補足

ポインタが指しているアドレスを使いたいのです。

関連するQ&A

専門家に質問してみよう