코딩 학습/C와 C++

C - 배열

이개 2026. 3. 4. 00:27

배열

자료구조 중 가장 기초가 되는 자료구조.

사용할 메모리 크기를 고정해서 선언

선언된 후에는 크기 변경이 불가

 

배열 호텔

배열을 호텔에 비유해봅시다. 단, 이 호텔에는 규칙이 있습니다.

  1. 사용할 객실 개수를 객실 사용전에 예약해야만 합니다. 예약된 개수는 변경 불가능합니다.
  2. 연속된 객실로 배정 받게됩니다.
  3. 객실의 번호는 0번부터 시작합니다. 객실의 번호를 index라고 부릅니다.
// 선언 방법
자료형 배열명[배열크기];

// 선언과 동시에 초기화 방법
자료형 배열명[배열크기] = { 값0, 값1, ..., 값(배열크기-1) };
// 자료형 호텔명[객실개수] = { 사람0, 사람1, ..., 사람(객실개수-1) };

 

배열 관련 고찰

배열의 index는 항상 0부터 시작합니다. 한국인이라면, 건물도 1층부터 시작하기에 자연수가 익숙합니다. 0부터하면 익숙하지 않습니다. 다만 배열의 크기를 1 크게 잡는다면 1부터 시작해도 되긴합니다만, 앞으로 대부분의 소스코드들은 0부터 시작하기 때문에 익숙해질 필요가 있습니다.

int arr[11]; // 이렇게 잡아야 index 1 ~ 10까지 사용가능.
int i;

for (i = 1; i <= 10; ++i)

 

 

2차원 배열

이해할 때는 1차원 배열을 쌓아올린 형태로 이해하면 됩니다. 실제로는 메모리 상에는 1차원 배열이 나열되어 있고, 2차원인 척을 해줍니다.

 

// 선언 방법
자료형 배열명[배열크기1][배열크기2];

// 선언과 동시에 초기화 방법
자료형 배열명[줄개수][칸개수] = { { 값00, 값01, ..., 값0(칸개수-1)},
                                             ...
                              { { 값(줄개수-1)0, 값(줄개수-1)1, ..., 값(줄개수-1)(칸개수-1) } };
                                      
// 자료형 호텔명[줄개수][칸개수] = { { 객실00,         객실01,          ... , 객실0(칸개수-1)},
//                                              ...
//                               { { 객실(줄개수-1)0, 객실(줄개수-1)1, ... , 객실(줄개수-1)(칸개수-1) } };

 

 

Ex050201) 2차원 배열 1

아래 소스 코드를 이중 반복문 꿀팁으로 출력 결과를 예측해봅시다. 예측한 결과와 출력을 비교해봅시다.

// Main.c

#include <stdio.h>

int main(void)
{
	int i, j;
	int Array2D[4][3] = { { 1,  2,  3, },
						  { 4,  5,  6, },
						  { 7,  8,  9, },
						  {10, 11, 12, } };

	for (i = 0; i < 4; ++i)
	{
		for (j = 0; j < 3; ++j)
		{
			printf("%2d ", Array2D[i][j]);
		}
		printf("\\n");
	}

	return 0;
}

 

 

선언과 동시에 초기화하는 건 괜찮지만, 중간에 초기화하는 건 안된다.

 

int Array2D[4][3];
Array2D = { 0 }; // ❌ 에러

 

초기화할 수 있는 경우

int Array2D[4][3] = { 0 };

memset(Array2D, 0, sizeof(Array2D));

 

배열은 C에서 "값 타입"이 아니라 특수한 메모리 블록 개념이라서 대입이 막혀있다.

 

C는 포인터 중심 언어라서:

int* p;
int a[5];
 

이 두 개의 문법이 연결되어 있음.

배열 선언은 타입 선언이 아니라 int 5개짜리 메모리 묶음 생성이라는 개념.

'코딩 학습 > C와 C++' 카테고리의 다른 글

C++ 기초 - 포인터와 레퍼런스  (0) 2026.03.05
C++ 기초 - Visual Studio 실행, 변수, 입출력  (0) 2026.03.04
C 언어 연습  (0) 2026.03.03
C - 포인터  (1) 2026.03.03
C - 동적 할당, 구조체  (0) 2026.03.03