補足(いいわけ?)004


Windows9xのDOS窓(2001/10/20)

掲示板の方では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などで、 最初の行が表示されないという問題が発生します。


なぜ配列には代入できないのか(2006/3/22)

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言語 ポインタ完全制覇」のページに戻る | トップページに戻る