読み直していてそう思いました。「領域外参照はしてはいけません」って言いますものね。「領域外参照はできません」とは言わない。6年前なんか、結論すでに出てますが、文字列リテラルを上げたのはprintf()で使ったからです。printfでの第一引数は両方文字列リテラルで渡しているので、どの道、ただの配列とは違うんですよ!!と強調しなければなりません。5.5を挙げたのは単純に制限がゆるく、ほとんどの実行時エラーについて警告を出さないからです。あとusaoさんがなぜ自分の揚げ足を取ろうとしていたのはわかりませんが、第二引数(&x)はprintf()で変更される処理がないだけで、変更できます。第二引数(&x)はprintf()で変更される処理がないだけで、変更できます。printfが変な実装になっていて、引数を変更しようと思えば変更できますね。それは確かにそうです。アドレスによって参照されたxは変更されたままです。問題なのは、printfは引数を変更する仕様ではなく、実際はxは変更されないのに、「xは変更されたままです」と書いたことです。それをusaoさんが指摘しただけだと思います。熟練のみなさんがこれほど顔赤くして議論し続けたんですから、まだ学習中の人にとりあえず課題として取り上げた自分の優しさに感謝してほしいぐらいです!顔を赤くしたのはただの屍のようださんの課題が原因だと思いますけどね。C言語の仕様としてどうなのか、というのは重要なことなので盛り上がりますね。SDさんの疑問は「値渡しだと元の変数は変更されないのに、ポインタ渡しだと変更されるのはなんで?」でした。その疑問とただの屍のようださんの出した課題の論点がずれているのが、議論が白熱した原因の一つだと思います。フォーラムルールに抵触する書き込みですので添削させて頂きました。申し訳ありませんが、冷静な議論をお願いします。後、何度も書いているのでしつこいと思われるでしょうが、マナーを勉強して頂きたいのでお願いします。6年前なんか知らないうちにこんなことが......。参考用に「未定義の動作」という言葉の定義を書いておきます。規格を知らない人がこの議論を読む上で参考になるかと思いますので。いうか,この定義を知らないと話について行けないかと。可搬性がない若しくは正しくないプログラム構成要素を使用したときの動作,又は正しくないデータを使用したときの動作であり,この規格が何ら要求を課さないもの。未定義の動作に対して,その状況を無視して予測不可能な結果を返してもよい。翻訳時又はプログラム実行時に,文書化された,環境に特有な方法で処理してもよい(診断メッセージの発行を伴っても伴わなくてもよい。(診断メッセージを出力し)翻訳又は実行を中断してもよい。behaviorは「してはいけないこと」という認識です。「できる」「できない」と「してはいけない」は別のことなので。behaviorは処理系が文書化してくれないと何がおこるかわからない。(ym114さんが規格から引用された文のうち,後段の文の直前の文に書かれています)。文字列リテラルを書き換えた場合,別の文字列リテラルも一緒に変更される可能性があります。6年前>問題なのは、printfは引数を変更する仕様ではなく、実際はxは変更されないのに、「xは変更されたままです」と書いたことです。>それをusaoさんが指摘しただけだと思います。揚げ足と感じるかは人それぞれなので難しいですよね。非表示エリアこの非表示エリアを表示するには、登録し、ログインする必要があります。「XXXさんの書き込みはどうしても攻撃的に見えちゃう」とかまぁ私にもあります(!)し,仕方ないことかと思いますけど.非表示エリアこの非表示エリアを表示するには、登録し、ログインする必要があります。私の疑問も解決しましたし、これで解決にさせていただきます。これからも、初学者にとって、尋ねやすく、また少しかじった先学者が回答しやすい掲示板であって欲しいと思います。この掲示板は呆け防止に大変役立っております。相手の書き込みが攻撃的に見えても、あくまでも冷静に対応するのがうまい対処だと思いますよ。内心怒るのは仕方ないとしても、掲示板に投稿するテキストはあくまで冷静に、淡白に。テキストは心が伝わりにくいので、テキストで怒った様子を表すと想像以上の効果になり得ます。非表示エリアこの非表示エリアを表示するには、登録し、ログインする必要があります。最後にコンパイラと動作状況をまとめておきます。