본문 바로가기
개발/C, C++

[c/c++] 1차원 배열 (2)

by 77monkey 개발자 2023. 8. 26.
반응형

지난 포스팅에 이어서 오늘은 배열의 초기화, 크기에 대해서 알아보도록 하겠습니다. 

혹시나 이전 포스팅을 보지 않고 오셨다면, 참고하시길 바랍니다. 

 

[c/c++] 1차원 배열

배열을 다루게 되면 할 수 있는 것이 많아집니다. 1차원 배열에 대해서 설명하려고 합니다. 배열 선언과 배열 특징에 대해서 알아보도록 합시다. 배열 먼저 배열에 대해서 알아보면, 배열은 동일

77monkey.tistory.com


배열의 초기화

배열을 선언하고 초기화를 하지 않으면 배열은 쓰레기 값, 즉 원하지 않은 데이터 값을 가지고 있게 됩니다. 그렇기 때문에 초기화를 해주는 것은 중요합니다.

dataType arrayName[arraySize];

1차원 배열을 초기화하는 방법은 배열을 선언한 뒤 배열의 값을 설정하면 됩니다. 

dataType arrayName[arraySize] = {arrayVal0, arrayVal1, ..., arrayValN};

하지만 arraySize가 100과 같이 큰 숫자일 경우에 100까지 다 값을 선언하기는 힘듭니다. 이때에는 0번 index부터 차례대로 초기화를 합니다. 그럼 나머지는 다 0으로 자동 초기화가 됩니다. 

dataType arrayName[arraySize] = {arrayVal0, arrayVal1};

arraySize가 2보다 큰 5라고 하면, arrayName[0] = arrayVal0, arrayName[1] = arrayVal1로 설정이 되고, arrayName[2], arrayName[3], arrayName[4]는 모두 0으로 초기화가 됩니다.

자주 쓰는 초기화 방법은 0으로 초기화를 하는 것입니다. 

#include <stdio.h>

int main() {
	int arr[5] = { 0 };

	for (int i = 0; i < 5; i++)
		printf("%d\n", arr[i]);

	return 0;
}

위와 같이 초기화를 하면 arr 배열 모두 0으로 초기화가 됩니다. 

출력 결과는 모두 0입니다. 

 

배열의 크기

배열의 크기는 arraySize를 보면 된다고 생각하는데, 가끔 계산이 필요할 때가 있습니다. 

배열의 크기 = sizeof(배열) / sizeof(배열[0])

배열의 이름은 배열의 총 크기를 의미하여, 배열의 총 크기에서 type을 의미하는 array[0]으로 나누면 배열의 크기를 알게 됩니다. 참고로 sizeof는 컴파일시에 결정됩니다.

 

예시를 들면 다음과 같습니다. 문자열의 크기는 아래처럼 문자열만큼만 잡을 수 있습니다. 이렇게 초기화를 하게 되면, size를 알 수 없게 되는데 이때 위에서 사용한 배열의 크기를 이용해서 size를 알 수 있습니다. 

#include <stdio.h>

int main() {

	char message[] = "nice to meet you";

	int size = sizeof(message) / sizeof(message[0]);

	printf("sizeof(message): %d\n", sizeof(message));
	printf("sizeof(message[0]): %d\n", sizeof(message[0]));
	printf("arr size: %d\n", size);

	return 0;
}

위 코드에 있는 message 배열은 아래와 같이 표현할 수 있습니다.

결과는 다음과 같습니다.

sizeof(message): 17
sizeof(message[0]): 1
arr size: 17

message[0]의 type이 지금은 char이기 때문에 값이 1로 나오지만, int이거나 struct일 경우에는 배열의 크기는 달라집니다.

 

마무리

오늘은 배열의 초기화와 배열의 크기에 대해서 알아보았습니다. 배열의 초기화는 정말 기본 중에 기본입니다. 초기화를 하지 않고 사용하면 원하지 않은 동작이 발생하여 panic이 발생할 수도 있습니다. 혹시나 읽으시면서 어려운 부분이 있다면 댓글 부탁드립니다.

 

 

반응형

'개발 > C, C++' 카테고리의 다른 글

[c/c++] 2차원 배열, N차원 배열  (0) 2023.08.30
[c/c++] 배열 룩업 테이블(look up table)  (0) 2023.08.27
[c/c++] 1차원 배열  (0) 2023.08.25
[c/c++] switch문  (0) 2023.08.21
[c/c++] do while문  (0) 2023.08.20