만져보는 임베디드 시스템/아두이노 소프트웨어

아두이노 소프트웨어-vii. 배열

hanjinee 2020. 12. 31. 00:38

안녕하세요 제타지니입니다. 오늘은 아두이노의 배열 함수에 대해서 다루어 보겠습니다. 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] 까지의 배열의 값 출력

}

}

 

 

 

728x90