array

説明

配列とは、インデックス番号を使ってアクセスする変数の集まりです。Arduinoスケッチのプログラミング言語であるC++の配列は複雑ですが、単純な配列を使うのは比較的簡単です。

配列を作る(宣言する)方法

以下のメソッドはすべて、配列を作成(宣言)する有効な方法です。

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 型の配列を宣言する場合は、必要な null 文字を格納するために、初期化時よりも 1 つ多くの要素が必要になることに注意してください。

配列へのアクセス

配列はゼロ添字です。つまり、上記の配列の初期化を参照すると、配列の最初の要素は添字0であり、したがって

mySensVals[0] == 2, mySensVals[1] == 4 などとなります。

また、10個の要素を持つ配列では、インデックス9が最後の要素であることを意味します。したがって

int myArray[10]={9, 3, 2, 4, 3, 2, 7, 8, 9, 11};
// myArray[9]    contains 11
// myArray[10]   is invalid and contains random information (other memory address)

そのため、配列のアクセスには注意が必要です。配列の終端を越えてアクセスする(宣言された配列サイズ-1よりも大きなインデックス番号を使用する)ことは、他の目的で使用されているメモリから読み取ることになります。このような場所からの読み出しは、無効なデータを得る以外にはあまり意味がないでしょう。ランダムなメモリ位置への書き込みは、間違いなく悪いアイデアであり、クラッシュやプログラムの誤動作などの不幸な結果を招くことがよくあります。また、これは追跡するのが難しいバグでもあります。

BASICやJAVAと異なり、C++コンパイラは、配列へのアクセスが宣言した配列サイズの範囲内にあるかどうかをチェックしません。
配列に値を代入するには

mySensVals[0] = 10;

配列から値を取り出すには

x = mySensVals[4];

配列とFORループ

配列はしばしばforループの中で操作され、ループカウンタが各配列要素のインデックスとして使用されます。例えば、配列の要素をシリアルポートに出力するには、次のようにします。

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

プログラム例

配列の使用方法を示す完全なプログラムについては、こちらを参照してください。

タイトルとURLをコピーしました