C言語の char x[] と, char *x の違いを理解するためのコードの解答ですが,ポイントは,「領域」にあります. プログラムは,(色んな分け方がありますが)メモリ上ではいくつかの領域に分かれています. コード領域:プログラムのコード本体が入っている領域 定数領域:定数(リテラル)のための領域 スタック領域:変数や関数呼び出しなどに用いられる領域 ヒープ領域:動的にメモリを確保するとき用の領域 などがあります. ここで, int main(){ char x[] = "hoge"; char *y = "hoge"; x[0]='a'; y[0]='a'; return 0; } の2行目, char x[] = "hoge"; では,文字列"hoge"5バイト分*1の配列xをスタック領域に確保し,そこへ'h','o','g','e','\0'の文字列を格納しています. それに対