- 締切済み
お手数ですが
初心者的な質問かもしれませんが、宜しくお願いします。 64bitの環境で (1)アドレスは 32 bit Pointerとして扱われますでしょうか。 (1) int *p_point 構造体での【kozou】アドレスは64bitですが、構造体内でint型変数(2)のアドレスは64bitでしょうか?32bitでしょうか? ・addrはint型 ・kouzou構造体名 (2) &kouzou->addr
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★質問の意味が段々分からなくなってきましたよ。 >構造体をポインタではなくエリアで内部宣言をしているものがあるのですが、 >(2)を32bitにしたい場合はTPF_SS4のようなものがあるのでしょうか? >例)(2)struct AAAA eria_1; ↑ エリア内部で宣言とはどういう事ですか? 配列の名前がポインタを表すように構造体も同じですよ。 名前がそのままデータの位置(ポイント)を指す=ポインタです。 よって struct AAAA eria_1; の『&eria_1』も64ビット環境ならば64ビットです。 ・変数の種類によって32ビット・ポインタや64ビット・ポインタを使い分けることは出来ません。 何か大きな思い違いをしていませんか? 質問の内容では『(1) int *p_point』は64ビット環境ならポインタは64ビットです。 構造体のメンバのアドレス演算子も64ビット環境なら64ビットで返されます。 struct { int addr; } kouzou; の場合。 『&kouzou』も『&kouzou->addr』も64ビット環境ならアドレス演算したときに64ビットの ポインタ値を返します。構造体だろうが int 型だろうが関係ありません。 こんな説明で分かりましたか? ・補足があればどうぞ。
- asuncion
- ベストアンサー率33% (2127/6289)
sizeof() を使えば、一発でわかると思います。
お礼
はじめにそうしたかったですが、 現在ここには64bit環境がありません。 率直な意見ありがとうございます。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★過去にも似たような質問がありました。 ・http://oshiete1.goo.ne.jp/qa2633268.html→『ポインタのサイズ』 これ。 64ビット環境ならポインタはどれも64ビットになります。 http://www.marbacka.net/asm64/arkiv/variables_declaration.html コンパイラのオプションによっても一律32ビット、64ビットを選択できたりします。 例えば VC++2003 では『/Wp64』を指定するとポインタが64ビットに対応します。 ・以上。
お礼
ありがとうございます。参考になりました。 専門家にお聞きします。 64bit環境ではpointerアドレスは64bitになる事が分かりました。 (1)のアドレス&henも環境が64bitなんで8byteアドレスという認識ですよね。 例)(1)char hen[10]; 構造体をポインタではなくエリアで内部宣言をしているものがあるのですが、(2)を32bitにしたい場合はTPF_SS4のようなものがあるのでしょうか? 例)(2)struct AAAA eria_1;
- aris-wiz
- ベストアンサー率38% (96/252)
なにを聞きたいのか良くわかりませんが、 64bit環境でのポインタ、アドレスは一律64bit。 32bit環境でのポインタ、アドレスは一律32bitです。 CPUのアーキテクチャによって決まるもので、 オブジェクト型に依存するものではありません。
お礼
すいません。 ありがとうございました。
お礼
補足は大丈夫です。 では、ありがとうございます。 お手数かけました。。