배열
배열(array)
배열은 변수를 선언한 크기만큼 할당하고 그 공간안에 일자로 변수들을 나열한다. 동일한 자료형으로 표현되는 변수를 한 번에 여러개 선언하여 사용할 수 있다.
우선 배열을 이해하고 사용하기 위해서는 메모리할당 방식을 알아야한다.
1. 배열의 메모리할당
-
첫 변수의 메모리 주소를 기준으로 각 변수들도 주소를 할당받게 된다.
int 배열을 선언하고 각 주소를 확인해보면
#incldue <stdio.h> int main() { int arrInt[5] = { 1, 2, 3, 4, 5}; for (int i = 0; i < 5; i++) { printf("%p\n", &arrInt[i]); } return 0; }
위 코드는 한 번에 int를 5개 선언하고 각 공간에 1, 2, 3, 4, 5의 숫자로 초기화 한 뒤, 반복문을 사용해서 각 메모리의 주소를 출력한다.
출력결과
우선 메모리주소는 16진수로 표현된다. ( 0123456789ABCDEF )
위 출력결과를 보면 마지막 문자가 4씩 차이가 나는걸 알 수 있으며 이는 int의 크기인 4byte이고 배열로 5개를 선언하였기 때문에 총 20byte 크기의 메모리를 할당한 하게된다. -
배열을 선언할 때 크기는 초기화 리스트를 쓰면 크기가 알아서 할당되어 생략이 가능하다.
int array[] = { 1, 2, 3, 4 }; printf("%d", sizeof(array));
메모리크기를 출력하는 sizeof를 써보면 int * 4의 값이 나오게 된다.
2. 각 변수에 접근
- 배열의 나란히 나열된 점을 이용해 각 변수를 접근할 때 인덱스를 사용한다.
-
각 변수들은 처음 변수를 기준으로 0부터 시작하는 인덱스를 가진다. 이런 특징이 있기 때문에 배열을 출력할 때는 반복문을 사용하는 경우가 많다.
arrInt[0] = 100; arrInt[1] = 15; arrInt[2] = 100000000; arrInt[3] = 4; arrInt[4] = 19300;
3. 문자열 사용
-
char 자료형은 문자를 저장한다.
char a = 'a';
-
문자열을 저장하기 위해서는 char 배열을 사용한다.
char a[4] = { 'a', 'b', 'c' }; char a[4] = "abc";
문자열에는 문자의 끝을 알 수 있게 널문자가 할당된다. 따라서 배열을 선언할 때는 넣고자 하는 문자의 개수보다 크게 해야 에러가 발생하지 않는다.
-
char 자료형의 크기는 1byte이다. char[10]의 배열에는 영어 9자가 들어가고 한글은 4자까지 저장된다. 크기가 2배나 차이 나기 때문에 꼭 필요한 경우가 아니면 문자는 영어로 표현하게 된다.