[C] C언어 기초

[C] C언어의 배열(array)

ITsubin 2022. 4. 3. 00:44

배열부터는 실질적으로 프로그램을 만들 때 없어서는 안 되는 타이틀입니다.

 

배열이란 서로 같은 타입의 변수 여러 개를 나란히 나열한 것입니다.

 

[ 배열의 형식 ]

자료형 배열이름 [배열 길이]

ex) int array [10];

 

지금까지의 포스팅에서 int형 변수 a, b, c, d를 선언하려면 int a, b, c, d; 형식으로 선언하였습니다.

이를 그림으로 나타내면 아래와 같습니다.

하지만 배열은 위 사진처럼 각각 선언하지 않고 아래 사진처럼 한 번에 선언이 가능합니다.

 

배열 선언은 변수 선언과 비슷합니다.

int형 변수 num을 선언하려면 int num;으로 선언하듯

int형 배열 arr을 선언하려면 int arr[ ];로 선언합니다.

 

int a[4];처럼 선언을 하였다면 int형 변수 a가 4개가 묶여서 배열로 선언이 되는 것입니다.

이 때, 4를 "배열의 길이"라고 합니다. 즉 배열 안에 묶여있는 변수의 개수를 의미합니다.

위 그림에서는 int a[4]로 int형 변수 4개를 묶어 배열로 선언한 그림입니다.

 

하지만, 배열은 항상 "0"으로 시작하기 때문에, 배열이 a[0]으로 시작한 것을 확인할 수 있습니다.

a[0], a[1], a[2], a[3]"배열의 index"라고 합니다.

배열의 선언에 대해 알아봤으니 배열의 초기화에 대해서도 알아봐야겠죠

배열은 중괄호를 사용하여 초기화합니다.

int arr[3]을 각각 1, 2, 3으로 초기화하려면 int arr[3] = 1, 2, 3;이 아닌 int arr[3] = {1, 2, 3};의 형식으로 사용해야 합니다.

 

정수형 배열에서 모두 0으로 초기화하고 싶다면 길이에 상관 없이 { 0 }이면 모두 0으로 초기화됩니다.

ex) int a[100] = {0};   // 모두 0으로 초기화

 

문자 배열 초기화도 마찬가지입니다. char형의 배열에 A, B, C를 초기화하려면 char arr[3] = {'A', 'B', 'C'};의 형식으로 사용해야 합니다.

 

문자열 배열은 char str[12] = "Hello world";의 형식으로 초기화할 수 있습니다.

 

위의 문자 배열을 초기화할 때 문자열로 초기화한다면 char arr[4] = "ABC";처럼 중괄호 없이 간단하게 사용할 수 있습니다.

 

 

하지만 이상한 점이 하나 있습니다.

 

char arr[4] = "ABC";에서는 3글자로 초기화하는데 길이를 4로,

char str[12] = "Hello world";에서 Hello world는 공백을 포함하여 11자인데 왜 길이를 12로 할당했을까요?

길이를 11로 잡은 후 실행해보면 오류가 생기기 때문입니다.

 

char c[2] = "A"; 처럼 문자열 배열은 입력하고자 하는 길이값보다 한 칸의 자리를 더 줘야 하기 때문입니다.

왜냐하면, 문자가 끝났다는 의미인 NULL값을 넣어줘야 하기 때문입니다.

C언어에서의 널 문자는 \0으로 표현하기 때문에

char c[2] = "A";에서의 c[0]은 A이고, c[1]은 \0인 것입니다.

 

NULL값을 따로 넣어주지 않아도 자동으로 초기화 된 문자열의 마지막에는 NULL값이 자동으로 삽입됩니다.

 

배열의 크기를 구하는 명령어는 sizeof( ) 입니다.

위 예시의 결과는 "배열 arr의 크기는 20입니다."라고 나옵니다.

int형 변수는 4바이트로, arr 배열은 int형 변수 5개로 이루어져 있기 때문에 총 20바이트가 되기 때문입니다.

 

이번에는 sizeof( )함수를 응용하여 배열의 길이도 같이 구해보겠습니다. 

총 크기를 배열의 크기로 나누면 길이가 됩니다. 따라서 sizeof(arr) / sizeof(int)를 사용했습니다.

위 예시에서는 int형 5개로 총 20바이트입니다. 자료형의 개수가 배열의 길이와 같기 때문에 결국 길이를 알려면 int형의 크기인 4로 나누면 됩니다.

'[C] C언어 기초' 카테고리의 다른 글

[C] C언어 연습문제  (5) 2022.04.05
[C] C언어 기초 함수  (0) 2022.04.04
[C] C언어의 반복문_do ~ while  (0) 2022.04.02
[C] C언어의 반복문_while문  (2) 2022.04.01
[C] C언어의 반복문_for문  (0) 2022.03.31