656の説明でわかるかな?

文字列リテラルは文字が配列として並んでいる定数でそういう意味では5, 'a'
などと同じ。
int x = 5; char ch = 'a';に対して
x = 10; ch = 'b';なんてやるのは全然問題ないけど 
5 = 10 ; 'a' = 'b'なんてやるのはエラーになって当然。
しかし世の中には定数を読み書き可能領域に割り当てたりするコンパイラもあるので
654のコードがエラーにならない場合もあるらしい。