배열

설명

배열은 인덱스 번호로 접근되는 변수의 모임이다. 아두이노의 기반인 C++ 프로그램 언어의 배열은 복잡해질수 있지만, 단순한 배열 사용은 비교적 간단하다.

배열 생성(선언)

아래 방법 모두 배열을 생성(선언)하는 타당한 방법이다.

int myInts[6]; int myPins[] = {2, 4, 8, 3, 6}; int mySensVals[6] = {2, 4, -8, 3, 2, -7}; 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]); }

예제 코드

배열의 사용을 보여주는 완전한 프로그램은 (Tutorials) 에서 Knight Rider example 을 참고하세요.

더보기

ARDUINO BUY RECOMMENDATION

Arduino UNO R3
Arduino Starter Kit
Please note: These are Amazon affiliate links. If you buy the components through these links, We will get a commission at no extra cost to you. We appreciate it.

※ OUR MESSAGES