설명
배열은 인덱스 번호로 접근되는 변수의 모임이다. 아두이노의 기반인 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 형 배열을 선언할 때, 널 문자를 저장하기 위해 초기화 보다 하나 더 요소가 필요하다.
배열에 접근하기
배열은 0 인덱스인데, 즉, 위의 배열 초기화를 참조하면, 배열의 첫 요소는 인덱스 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, 자바와 달리, C++ 컴파일러는 배열 액세스가 선언한 배열 크기 법적 범위 안에 있는지 체크하지 않는다.
값을 배열에 할당:
mySensVals[0] = 10;
배열에서 값을 추출:
x = mySensVals[4];
배열과 for 루프
배열은 종종 for 루프 안애서 다루어지며, 여기서 루프 카운터가 각 배열 요소의 인덱스로 사용된다. 예를들어, 시리얼 포트를 통해 배열의 요소를 인쇄하려면, 아래와 같이 할 수 있다:
int i;
for (i = 0; i < 5; i = i + 1) {
Serial.println(myPins[i]);
}