Arduino日本語リファレンス


【配列の生成(宣言)】

次の書き方はどれも配列を生成(宣言)する有効な方法です。

int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";

myIntsの例のように、初期化せずに配列を宣言することができます。

myPinsの例では、配列のサイズを明示せずに宣言しています。コンパイラは要素の数をカウントして、必要なサイズの配列を生成します。

mySensValsの例は初期化とサイズの指定を行っています。char型の配列を宣言するときは、ヌル文字を記憶するために1文字分余計に初期化する必要があります。


【配列のアクセス】

配列のインデックスはゼロから始まります。つまり、配列の最初の要素にアクセスするときのインデックスは0です。10個の要素があるとしたら、インデックス9の要素が最後ということになります。

int myArray[10]={9,3,2,4,3,2,7,8,9,11};
  // myArray[9]   この変数が持っているのは11(最後の要素)
  // myArray[10]  このindexは無効で、ランダムな値が返ります

配列にアクセスするときは、このゼロから始まるインデックスに注意が必要です。配列の終端を越えてアクセスしてしまうと、他の目的で使用されているメモリを読んでしまいます(配列のサイズから1を引いた値がインデックスの最大値です)。配列の範囲外であっても読み込みならば無効な値が得られるだけで済みますが、そこにデータを書き込んでしまうと、プログラムが不具合を起こしたり、クラッシュしたりといった不幸な事態が起こります。これはまた発見が難しいバグの原因にもなります。

BASICやJAVAと違い、Cコンパイラは配列がアクセスされるときにインデックスが宣言された範囲に収まっているかどうかをチェックしません。

【例】

配列の要素に値を割り当てます。

mySensVals[0] = 10;

配列から値を読み取る例です。

x = mySensVals[4];

forループのなかでループカウンタをインデックスに使って配列を操作することがよくあります。たとえば、配列の要素をシリアルポートに出力するときは、次のようにします。

int i;
for (i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}



[目次へ戻る]

Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください [ドキュメント一覧]