>>821

char a[] = "itteyo-shi";
char *p = "itteyo-shi";

後者で何が起こっても不思議じゃないなんてこたない。
どっちも規格に合致してる書式だし、実際に問題の起こる処理系は見たことない。

aはaというラベルのついてる11バイトの領域に文字列「itte-yoshi\0」が入ってる。
 a |i|t|t|e|-|y|o|s|h|i|\0|

pはpというラベルのついてる領域に、どっかにある「itte-yoshi\0」という文字列
の先頭を指す値(ポインタ)が入っている。
 p |ポインタ| → |i|t|t|e|-|y|o|s|h|i|\0|

斯様にポインタと配列はまったくの別物であるが、Cの場合大抵の場面で
ポインタと配列は同じように扱えるってだけの話。

ただし、pのように初期化したときに取られる文字列の領域を書き換えてはいけないと
規格では書かれている。
もし書き換えたら、(この場合に限り)何が起こっても不思議じゃない。