• ベストアンサー

オブジェクト(メモリ)のアドレスについて

■C++言語を勉強中です。 ■ポインター関係でオブジェクトのアドレスを求めています。 ■参考にC言語とC++言語で求めてみました。 ■ところが、C++プログラムでchar型のアドレスが表示されません。 ■C言語では表示されます 「質問」理由が分かりません、C++初心者です、宜しくお願いします。 //オブジェクトのアドレス //C++言語 #include <iostream> using namespace std; int main() { char x;      int y; double z; cout << "xのアドレス :" << &x << '\n'; cout << "yのアドレス :" << &y << '\n'; cout << "zのアドレス :" << &z << '\n'; return 0; } /* //C言語 #include <stdio.h> int main() { char x; int y; double z; printf("xのアドレス :%p \n",&x); printf("yのアドレス :%p \n",&y); printf("zのアドレス :%p \n",&z); return 0; } */  

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

  • ベストアンサー
  • OUKEIWEV
  • ベストアンサー率50% (1/2)
回答No.1

QNo.2132210:char型変数のアドレスを coutで表示するには に void*にキャストってあります。 試してみては?

参考URL:
http://okwave.jp/qa/q2132210.html
smiyaf
質問者

お礼

有難うござます。 試してみます。

smiyaf
質問者

補足

■下記の様で良いのでしょうか? ■結果は下記でした。 ・Xのアドレス :0012FF8B ・Yのアドレス :0012FF84 ・zのアドレス :0012FF7C #include <iomanip> #include <iostream> using namespace std; int main() { char x; int y; double z; cout << setfill('0'); cout << "xのアドレス :" << setw(8)<<hex<<uppercase <<int(&x) << '\n'; cout << "yのアドレス :" << &y << '\n'; cout << "zのアドレス :" << &z << '\n'; return 0; }

その他の回答 (3)

回答No.4

>以上でよろしいでしょうか? はい、良いと思います。

回答No.3

まだ締め切ってないみたいなので、少しだけアドバイスを。 まず1つ目。 No.1氏へのお礼について。 void main(){ char x; cout << (void*)&x << endl; } 私の場合、これで通りました。 2つ目。 No.2氏の仰りたい事は、こういう事です。 void main(){ char a[] = "hello world"; cout << a << endl; } 出力結果:hello world 質問者様の cout << &x << endl; と、私の cout << a << endl; はどちらも同じようにアドレスを渡しているのは理解出来ますでしょうか?

smiyaf
質問者

お礼

丁重な回答ありがとうございます。 >まず1つ目。No.1氏へのお礼について・・・ ・下記で出来ました。 cout << "xのアドレス :" <<(void*)&x << endl; ・操作子を使用せず、他と同じ書式で表示されました。 ・最初、試した時、結果が0で表示されたので止めたのですが。・・・ >2つ目。No.2氏の仰りたい事は、こういう事です。 ・配列の名前は、その配列の先頭要素のアドレスを表す。 ・&はアドレス演算子である。 以上でよろしいでしょうか?

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

「理由」自体は「クラス ostream が operator <<(const char *) を持っている」から. つまり「文字列の出力」と区別ができない, ってこと.

smiyaf
質問者

お礼

ありがとうございます。 勉強します。