안녕하세요 제타지니입니다. 오늘은 아두이노의 배열 함수에 대해서 다루어 보겠습니다. ARRAY!
이전의 포스트에서 아두이노 자료형에 관하여 올린 적이 있습니다. double, float, int, char.. 등등을 올렸습니다만.
실상 저렇게 자료형을 선언한다고 한들, 그 자료형을 사용하면 하나의 값만을 저장할 수 있어서, 여러개의 데이터를 한번에 다루기가 불편합니다. 그래서, 동일한 데이터형의 값을 여러 개 저장할 수 있는 '배열'을 사용합니다. 다만 기억하셔야 할 것은 이렇게 변수의 선언은 메모리 내에 변수의 값을 저장할 메모리 공간을 확보하는 일이며 배열은 메모리의 연속된 번지에 할당된다는 점입니다.
맨 처음 자료형에 대해서 설명을 드렸을 것입니다.
char 형을 예로 들어 볼게요.
char 형은 '문자'형으로 1 byte 크기의 메모리를 차지합니다.
그런데 char형 배열은 1 byte 간격으로 메모리에 할당되지요?
이 두 개의 차이는 꽤나 극명한 차이를 내는데요,
기본 자료형 ==> 변수 이름 = 값, 즉 기본 데이터형의 경우 변수 이름 자체가 메모리에 저장된 값에 대응
배열 ==> 변수의 이름 = 메모리 주소에 대응, 배열은 여러개의 값이 동일한 이름의 변수에 저장되기 때문에, 따라서 변수 이름은 값이 아닌 메모리의 위치를 가리킴
이때 배열에 쓰는 연산자는 '*'입니다. ('*'연산자 = 대괄호 내에 인덱스를 사용하거나 번지에서 값을 얻어노는 연산자)
ex)
int B[4] = {1, 2, 3, 4}; //배열 B 선언
B[1] = *(B+1) = 2 가 되는 거죠!
배열의 요소를 읽는 방법에는 다음과 같은 방법이 있습니다.
/*선언*/
int a[5][5];
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
a[i][j] = 5*i +j;
}
}
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
Serial.println( +String(int(&a[i][j]))); //a[0][0], a[0][1], a[0][2] ... a[5][4], a[5][5] 까지의 주소값 출력
Serial.println( +String(a[i][j])); //a[0][0], a[0][1], a[0][2] ... a[5][4], a[5][5] 까지의 배열의 값 출력
Serial.println( +String(*((int*)a + 5*i +j))); //a[0][0], a[0][1], a[0][2] ... a[5][4],
a[5][5] 까지의 배열의 값 출력
}
}
'만져보는 임베디드 시스템 > 아두이노 소프트웨어' 카테고리의 다른 글
아두이노 소프트웨어-ix. 객체지향 (0) | 2020.12.31 |
---|---|
아두이노 소프트웨어-viii. C언어 함수, 포인터 (0) | 2020.12.31 |
아두이노 소프트웨어-vi. 실행 흐름 제어 (0) | 2020.12.31 |
아두이노 소프트웨어-v.연산자 (0) | 2020.12.31 |
아두이노 소프트웨어-iv.변수 (0) | 2020.12.31 |