目次
1. 소개
C 언어에서 배열 초기화는 프로그래밍의 첫 단계이면서도 매우 중요한 포인트입니다. 초기화가 올바르게 이루어지지 않으면 예상치 못한 버그나 오류의 원인이 되기 쉽습니다. 이 기사에서는 초보자부터 중급자까지를 대상으로 배열 초기화 방법을 단계별로 설명하고, 실제로 도움이 되는 팁도 포함했습니다. 이를 통해 여러분도 배열 초기화 전문가에 한 걸음 더 다가갈 수 있을 것입니다!2. 배열이란? C 언어에서의 역할
배열은 같은 데이터 타입의 여러 값을 한 번에 다루기 위한 편리한 구조입니다. 예를 들어, 시험 점수를 저장할 때 30명의 점수를 각각 별개의 변수에 저장하는 것보다 하나의 배열에 모으는 것이 훨씬 효율적입니다.예: 배열 선언
int scores[30]; 이 코드를 통해 30명의 점수를 저장할 수 있는 배열이 확보됩니다. 배열을 사용할 때 주의해야 할 점은 초기화되지 않은 배열에는 불확정 데이터가 포함될 가능성이 있다는 것입니다. 따라서 적절한 초기화가 필수적입니다.
3. 기본적인 배열 초기화 방법
배열을 선언함과 동시에 초기화할 수 있습니다. 이는 프로그램 실행 시 필요한 데이터를 미리 설정하는 데 유용합니다.예1: 선언과 동시에 초기화
int arr[3] = {1, 2, 3}; 이 코드에서는 3개의 요소를 가진 배열arr
가 선언되고, 각각의 요소에 값이 할당됩니다. C 언어에서는 배열의 크기를 지정하지 않아도 초기화 리스트에서 자동으로 크기가 추정되는 경우도 있습니다.예2: 크기를 생략한 초기화
int arr[] = {1, 2, 3}; 이 형식에서는 배열의 크기가 초기화하는 값의 수에 따라 추정됩니다.힌트:
배열의 크기를 명시적으로 적는 것이 좋은 경우도 있지만, 생략함으로써 코드가 간결해지고 가독성도 향상됩니다.4. 부분적인 초기화
배열을 부분적으로 초기화하는 경우, 지정하지 않은 요소에는 자동으로 0이 할당됩니다. 이는 특정 요소에만 값을 할당하고 싶을 때 유용합니다.예: 부분적인 초기화
int arr[5] = {1, 2}; // 나머지 요소는 자동으로 0이 됩니다 여기서는 처음 두 요소에1
과 2
가 초기화되고, 다른 요소는 0
으로 설정됩니다. 이 형식은 대량의 배열을 다루거나 초기값이 일부만 필요한 경우에 유용합니다.
5. 제로 초기화
모든 요소를 제로로 초기화하고 싶다면, 다음과 같이 간결하게 기술할 수 있습니다.예:모두 제로로 초기화
int arr[5] = {0}; // 전 요소가 0으로 초기화됩니다 이 방법은 제로 클리어하려는 대규모 배열에 매우 편리합니다. 또한, 많은 요소를 가진 배열의 경우,memset
함수를 사용하여 효율적으로 초기화할 수 있습니다.예:memset
를 사용한 제로 클리어
memset(arr, 0, sizeof(arr)); memset
를 사용하면, 대규모 배열에서도 빠르게 초기화할 수 있습니다.6. 다차원 배열 초기화
2차원, 3차원과 같은 다차원 배열도 C 언어에서는 쉽게 다룰 수 있습니다. 행렬 데이터나 복잡한 데이터 세트를 다룰 때 유용합니다.예: 2차원 배열 초기화
int arr[2][3] = { {1, 2, 3}, {4, 5, 6} }; 여기서는 2행 3열의 배열이 선언되고, 각 행에 초기값이 할당됩니다.예: 3차원 배열 초기화
int tensor[2][2][2] = { {{1, 2}, {3, 4}}, {{5, 6}, {7, 8}} }; 이 예에서는 2x2x2의 3차원 배열이 선언되고, 각 요소에 초기값이 설정됩니다. 다차원 배열을 사용할 경우, 배열의 크기와 초기화 순서에 주의하는 것이 중요합니다.
7. 동적 배열 초기화
배열의 크기가 실행 시에 결정되는 경우에는malloc
함수를 사용하여 동적으로 메모리를 할당합니다. 동적 배열은 특히 크기가 고정되지 않은 경우에 유용합니다.예: 동적 배열 초기화
int *arr = (int *)malloc(5 * sizeof(int)); for (int i = 0; i < 5; i++) { arr[i] = i; } 이 예에서는 동적으로 메모리를 확보하고, 루프를 사용하여 각 요소에 값을 할당하고 있습니다.메모리 누수 방지:
동적으로 확보한 메모리는 사용이 끝난 후 반드시free
함수를 사용하여 해제해야 합니다. 이를 소홀히 하면 메모리 누수가 발생하고 시스템의 메모리 자원이 낭비됩니다. free(arr);