❤恋するコンピュータサイエンス❤

コンピュータサイエンス、3DCGをもっと楽しく、もっと本質的に!c言語、c++の記事中心です

C言語の配列は0から始まる

Q.

下記は何が表示されるか?


char m[3] = "abc";
printf("%c ", m[1]);

 

A.



 

解説
C言語の配列は、
宣言文」と「」で、全く書き方の意味が異なります。

 

宣言文では、
型 配列名[素数] です。

int array   [3]

と書いた場合、int型の素数を3つ持つ配列aが宣言されます。
つまり
array   [0] 〜 array   [2]までが使えるようになり

array   [3]

使えません。

 

では
配列名[添字]
    a [3]
というのが、配列の要素に対するアクセスを行う式になります。

 

配列名の実態は、配列の先頭を指すポインタであり、
添字は、先頭の要素からいくつ分オフセットした要素かを表します。
オフセットは、いくつ進めるか、と考えても良いです。

 

a[3]
と書いた場合、aが指し示す要素から、3個進んだ要素を表します。
先頭の要素、1つ進んだ要素、2つ進んだ要素、3つ進んだ要素、
なので、a[3]と書いた場合、4番目の要素へのアクセスになります

 

よくある間違いに、
int a[5]
宣言したのだからと、
a[5]
と最後の要素数を書いたらなんとなく配列全体を指定できるような気がする。
というのがありますが、C言語にそんな機能はありません。
容赦なくルールに従って、
aの先頭から6番目の領域にアクセスして、他の変数の値を破壊したり、
アクセス違反でプログラムが強制終了させられたりします。

 

式として、書いた場合の[]はあくまでも演算子であり、特定の要素にアクセスするための物です。