- ベストアンサー
オブジェクト(メモリ)のアドレスについて
■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; } */
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
QNo.2132210:char型変数のアドレスを coutで表示するには に void*にキャストってあります。 試してみては?
その他の回答 (3)
- sankaku197
- ベストアンサー率47% (29/61)
>以上でよろしいでしょうか? はい、良いと思います。
- sankaku197
- ベストアンサー率47% (29/61)
まだ締め切ってないみたいなので、少しだけアドバイスを。 まず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; はどちらも同じようにアドレスを渡しているのは理解出来ますでしょうか?
お礼
丁重な回答ありがとうございます。 >まず1つ目。No.1氏へのお礼について・・・ ・下記で出来ました。 cout << "xのアドレス :" <<(void*)&x << endl; ・操作子を使用せず、他と同じ書式で表示されました。 ・最初、試した時、結果が0で表示されたので止めたのですが。・・・ >2つ目。No.2氏の仰りたい事は、こういう事です。 ・配列の名前は、その配列の先頭要素のアドレスを表す。 ・&はアドレス演算子である。 以上でよろしいでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
「理由」自体は「クラス ostream が operator <<(const char *) を持っている」から. つまり「文字列の出力」と区別ができない, ってこと.
お礼
ありがとうございます。 勉強します。
お礼
有難うござます。 試してみます。
補足
■下記の様で良いのでしょうか? ■結果は下記でした。 ・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; }