배열
자료구조 중 가장 기초가 되는 자료구조.
사용할 메모리 크기를 고정해서 선언
선언된 후에는 크기 변경이 불가
배열 호텔
배열을 호텔에 비유해봅시다. 단, 이 호텔에는 규칙이 있습니다.
- 사용할 객실 개수를 객실 사용전에 예약해야만 합니다. 예약된 개수는 변경 불가능합니다.
- 연속된 객실로 배정 받게됩니다.
- 객실의 번호는 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 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 |