配列

配列

配列は、変数の集合であり、添字を使ってそれぞれの要素にアクセスできる。Arduino言語の基となっているC++言語の配列は複雑だが、単純な配列は比較的わかりやすい。

配列の作成(宣言)

以下に示す配列の宣言方法は全て正しい。

1
2
3
4
  int myInts[6];
  int myPins[] = {2, 4, 8, 3, 6};
  int mySensVals[5] = {2, 4, -8, 3, 2};
  char message[6] = "hello";
  • myIntsのように、初期化しない配列を宣言することもできる。
  • myPinsでは、配列の大きさを明示的に選ばずに宣言している。コンパイラが要素数を数え、適切な大きさの配列を生成する。
  • 最後は、mySensVals のように初期化と大きさの指定を両方行う例である。messageのように、char型の配列を宣言するときは、ナル文字を保持するために1文字分余分に要素が必要となることに注意すること。

配列へのアクセス

配列の添字は0から始まるので、配列の最初の要素の添字は0である。上記のmySensValsの例では、mySensVals[0] == 2, mySensVals[1] == 4となる。

以下の例では、添字の9番が最後の要素である。

1
2
3
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)

このため、配列にアクセスする際は注意する必要がある。配列の終わりを過ぎて配列にアクセスすると、他の目的に利用しているメモリを読むことになる。 このような場所のデータを読むと、誤ったデータを読む以外に予期しないこと が起こりうる。任意のメモリに書き込むことはよくないことであり、プログラ ムが止まったりすることがある。これは見つけるのが難しいバグの一つである。

BASICやJavaとは異なり、C言語のコンパイラは宣言した配列の境界を越えてアクセスしたかどうかを調べない。

配列に値を設定する

1
mySensVals[0] = 10;

配列から値を読む

1
x = mySensVals[4];

配列とforループ

for分の中で配列を操作することがよくある。このとき、ループのカウンタは配列の添字を示すことが多い。配列の要素をシリアルポートに対して書き込むには、以下のようにすることができる。

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

配列の使い方を示す完全なプログラムは、内蔵スケッチ例配列の例の使い方を参照のこと。

参照

言語 PROGMEM

オリジナルのページ

https://www.arduino.cc/reference/en/language/variables/data-types/array/

Last Revision: 2022/11/11

最終更新日

January 4, 2024

inserted by FC2 system