重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (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);
}
    • good
    • 0

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

    • good
    • 0

intptr_t


uintptr_t

で32/64bit対応できるはず。

int i = 0;

uintptr_t ptr = (uintptr_t)&i;
    • good
    • 0

INT_PTR, UINT_PTR, intptr_t, uintptr_t ぐらいが浮かびますが・・・。


あなたの開発環境にも、これに類したものがあるとおもいますので、
適切なものを使ってください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/03/05 01:04

一応書いておくと


sizeofでポインタと各整数型の大きさを調べるのが確実です。
    • good
    • 0

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


ポインタをポインタのまま使ってなにか不都合でもあるのでしょうか?
    • good
    • 1
この回答へのお礼

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

お礼日時:2011/03/05 01:03

キャストを日本語に訳すと「型変換」となるので、何らかの型変換処理が行われると思いがちですが、キャストとはコンパイラに対する命令(?)なので、簡単に言えば「型をだます」だけで、何かが変わるわけではありません。



ですから、たとえば代入であればキャストするのは代入先の型に合わせるだけです。
代入元は、アドレス値であろうが整数値であろうが、何でもいいのです。

この回答への補足

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

補足日時:2011/03/04 20:42
    • good
    • 0

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

この回答への補足

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

補足日時:2011/03/04 20:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!