【初心者歓迎】C/C++室 Ver.48【環境依存OK】at TECH【初心者歓迎】C/C++室 Ver.48【環境依存OK】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト277:デフォルトの名無しさん 08/02/09 20:30:49 >>274 正しい。 278:デフォルトの名無しさん 08/02/09 20:43:53 >>276 単に何の型のポインタになっているかで決まる。 型が char* のときとそれ以外の T* について operator<< のオーバーロードが違うだけ。 char a = 'A'; char* p = &a; cout << p << '\n' とすると確保されていない領域まで突き抜けて文字列が表示される (はず) 。 279:デフォルトの名無しさん 08/02/09 20:43:57 >>276 コンパイルするときに決まる。 それがconst char*だったら文字列、void*だったらアドレスを表示する。 その他のポインタ型は多重定義解決の規則に従って、上のどっちかに振り分けられる。 280:デフォルトの名無しさん 08/02/09 20:47:05 >>276 > p = &a > cout << p; > では、単純に変数aのアドレスが出力されるだけですよね。 (aがたとえば int であるとして。) それは間違い。 > p = &a これをやった時点でコンパイラは型が違うとエラーにする。 p = reinterpret_cast<&a>として無理やりキャストをしてpに int * の値を入れることは可能。 >処理系はどうやってpが「変数」のポインタだと判断するのでしょうか?? pを宣言する際に、その型を char* と指定しているから、pが実際にさす先に実際にあるものが charの配列であっても、int型の値であっても、コンパイラはcharの文字列であると扱う。 aの値がたまたま有効な文字の文字コードと'\0'が並んだ物となっていれば、該当する文字列として表示されるし、 そうでなければ制御コードを出力したり文字化けしたりする。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch