質問: C++,文字列のポインタについて
回答: "ABC"は文字列リテラル(文字列定数)。 ...と書くと、「文字列そのもの」と勘違いしがちだけど、しかしCやC++自体には「文字列」という「データ型」は存在しない。 では文字列リテラルとはなんなのか?というと、「その文字列が収納されたアドレス」。 理解してもらえるかどうかは分からんけど、 char *p="ABC"; と書くと、コンパイル時に strABC:db "ABC",0 といったアセンブリコードが生成され、 変数pにはラベルstrABCの値が代入される、というわけ。 なぜアドレスそのものではなく、そのアドレスに置かれた文字列が表示されるのか? 答えは単純明快。coutがそういう設計になっているから。 C++には「引数の型によって呼び出す関数を変える」という機能がある。この機能を使えば「引数としてchar型へのポインタが指示された場合は、そのポインタが指し示す文字列を表示する」ということができる。で、実際coutはそのようにしている、というだけの話。