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

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

hanjinee 2020. 12. 31. 00:38
728x90
반응형

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