補足(いいわけ?)004
掲示板の方では6/30に 報告 をいただき、 その上「まとめてWeb上でフォローしたいと思います」とか書いておきながら、 すっかり忘れていました。申し訳ありません。
Windows9x系のDOS窓では、「ユーザがCtrl-Zを叩いた後、 次の改行までの表示が行なわれない」という妙なバグ(仕様?)があります。
たとえば以下のように書いて、
getchar(); printf("hoge\n"); printf("piyo\n");
getchar()に対してCtrl-Zを入力した場合でも、 piyoは出ますがhogeは表示されません。
これにより、「C言語ポインタ完全制覇」のList4-4, 「C言語体当たり学習徹底入門」のList2-8などで、 最初の行が表示されないという問題が発生します。
p.204に、int array[10]のように宣言されたarrayに代入できない理由として、 以下の記述があります。
arrayは、確かに式の中ではポインタに読みかえられています。 しかし、それはあくまで&array[0]に読み替えられている、 ということに過ぎず、この場合のポインタは、右辺値だからです。
これについて、掲示板のほうで議論がありました。
http://kmaebashi.com/bbs/thread.php?boardid=kmaebashibbs&from=796&range=1
この場合のarrayは、配列がポインタに読み替えられない3箇所の例外に 当てはまりませんから、arrayはポインタに読み替えられており、かつ右辺値である、 と私は解釈しますが、 「なぜarrayに代入できないのか」という点に関しては、 それが右辺値であること以前に、 配列は「変更可能な左辺値」ではないから、という理由もあります。 掲示板の774RRさんの指摘にもあるように、規格の「変更可能な左辺値」の定義からは、 わざわざ配列が除かれているからです。
どちらにしてもこの場合のarrayに代入できないのに変わりはないのですが。
「補足(いいわけ?)」の目次に戻る | ひとつ前のページ | ひとつ後のページ | 「C言語 ポインタ完全制覇」のページに戻る | トップページに戻る