[929] Re:774RRさん、お返事ありがとうございます。
投稿者:(ぱ)こと管理人
2007/02/20 02:13:25
昨晩は「寒いから暖房が効くまで布団の中で本でも読んでよう」と思いつつ気が付いたら朝でした。こんなのばっか。
>>buf[10] で、無いオブジェクトの中を見に行っている時点で許されない。
>>*(cp+10) も同様。
>>ただし &buf[10] や cp+10 は許されるというあたりが微妙なところであったりする。
>
>明日試してみます。
ええと、試してみたところで「動いてしまう」可能性がそれなりにあります。
Cでは、配列の範囲を超えたところをアクセスしても、普通はエラー等にはならず、ずっと離れたところでプログラムがクラッシュしたりします。
それはさておき、「たけ」さんのサンプルプログラムでは、代入もしていない「buf[10]」の中身をいきなり参照していますが、それで「'1'」が入っていることを期待しているわけではないですよね? そもそも本当は何を聞きたかったのかが疑問です。
774RRさんのご指摘どおり、char buf[10];で宣言した配列のbuf[10]は参照できませんが、
char buf[10];
char *cp;
cp = buf;
として、*(cp + 3)とかを参照するのは合法です。buf[3]と同じものが見えます。
ただし、「*(cp + 3)」のようなわかりにくい書き方をするよりは、cp[3]と書いたほうがよいでしょう。これもbuf[3]と同じものが見えます。