Q.
下記は何が表示されるか?
下記は何が表示されるか?
char m[3] = "abc";
printf("%c ", m[1]);
A.
b
「宣言文」と「式」で、全く書き方の意味が異なります。
■宣言文では、
型 配列名[要素数] です。
int array [3]
array [3]
使えません。
■式では
配列名[添字]
a [3]
a [3]
というのが、配列の要素に対するアクセスを行う式になります。
配列名の実態は、配列の先頭を指すポインタであり、
添字は、先頭の要素からいくつ分オフセットした要素かを表します。
オフセットは、いくつ進めるか、と考えても良いです。
a[3]
と書いた場合、aが指し示す要素から、3個進んだ要素を表します。
先頭の要素、1つ進んだ要素、2つ進んだ要素、3つ進んだ要素、
なので、a[3]と書いた場合、4番目の要素へのアクセスになります。
よくある間違いに、
int a[5]
と宣言したのだからと、
a[5]
と最後の要素数を書いたらなんとなく配列全体を指定できるような気がする。
というのがありますが、C言語にそんな機能はありません。
容赦なくルールに従って、
aの先頭から6番目の領域にアクセスして、他の変数の値を破壊したり、
アクセス違反でプログラムが強制終了させられたりします。
式として、書いた場合の[]はあくまでも演算子であり、特定の要素にアクセスするための物です。