c++/기초

배열

코드망령 2026. 5. 29. 17:58

배열 (Array)

같은 자료형의 여러 변수를 하나의 이름으로 관리하기 위한 자료구조이다.

배열은 메모리에 연속적으로 저장되며, 각 요소는 인덱스(Index)를 통해 접근할 수 있다.


배열 선언

기본 문법

자료형 배열이름[크기];

예시

int numbers[5];
  • int형 변수 5개가 연속된 메모리에 생성된다.
  • 인덱스는 0부터 시작한다.

배열 요소 접근

int numbers[5];

numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;

배열의 첫 번째 요소는 0번 인덱스이다.

cout << numbers[0];

실행 결과

10

배열 초기화

배열은 {}를 이용하여 초기화할 수 있다.

int numbers[5] = { 1, 2, 3, 4, 5 };

크기를 생략한 초기화

배열 크기를 적지 않아도 초기화한 원소 개수만큼 자동으로 크기가 결정된다.

int numbers[] = { 1, 2, 3, 4, 5 };

위 코드는 아래와 같다.

int numbers[5] = { 1, 2, 3, 4, 5 };

일부만 초기화

int numbers[5] = { 1, 2 };

실제 저장 값

1 2 0 0 0

나머지 요소는 0으로 초기화된다.


배열과 인덱스

int numbers[5] = { 10, 20, 30, 40, 50 };
인덱스
0 10
1 20
2 30
3 40
4 50

배열 순회

배열은 반복문과 함께 자주 사용된다.

int numbers[5] = { 10, 20, 30, 40, 50 };

for (int i = 0; i < 5; i++)
{
    cout << numbers[i] << endl;
}

실행 결과

10
20
30
40
50

배열의 특징

  • 같은 자료형만 저장할 수 있다.
  • 메모리에 연속적으로 저장된다.
  • 인덱스를 통해 빠르게 접근할 수 있다.
  • 선언 시 크기가 고정된다.
int numbers[5];

한 번 생성된 배열의 크기는 변경할 수 없다.


정적 배열 (Static Array)

일반적인 배열은 선언과 동시에 크기가 결정된다.

int numbers[5];

이러한 배열을 정적 배열(Static Array) 이라고 한다.

특징

  • 크기가 컴파일 시 결정된다.
  • 스택(Stack) 영역에 생성된다.
  • 크기를 변경할 수 없다.

배열 크기 변경이 불가능한 이유

int numbers[5];

배열은 연속된 메모리를 미리 확보한다.

[10][20][30][40][50]

실행 중에 크기를 변경하면 새로운 연속 메모리가 필요하므로 일반 배열은 크기 변경이 불가능하다.


동적 배열

실행 중에 배열 크기를 결정하려면 동적 할당을 사용해야 한다.

new 사용

int size = 10;

int* numbers = new int[size];

메모리 해제

delete[] numbers;

동적 배열 특징

  • 실행 중 크기를 결정할 수 있다.
  • 힙(Heap) 영역에 생성된다.
  • 사용 후 반드시 해제해야 한다.
int* numbers = new int[100];

delete[] numbers;

VLA (Variable-Length Array)

일부 컴파일러는 다음과 같은 문법을 허용한다.

int size;
cin >> size;

int numbers[size];

이를 가변 길이 배열(VLA) 이라고 한다.


주의사항

VLA는 C++ 표준 기능이 아니다.

int size = 10;
int numbers[size];
  • GCC : 지원
  • Clang : 일부 지원
  • MSVC(Visual Studio) : 지원하지 않음

따라서 실무에서는 사용하지 않는 것이 좋다.


배열과 메모리 영역

정적 배열

int numbers[10];

스택(Stack) 영역 사용


VLA

int numbers[size];

스택(Stack) 영역 사용


동적 배열

int* numbers = new int[size];

힙(Heap) 영역 사용


malloc

int* numbers = (int*)malloc(sizeof(int) * size);

힙(Heap) 영역 사용

메모리 해제

free(numbers);

C++에서 권장하는 방법

현대 C++에서는 배열 대신 std::vector 사용을 권장한다.

#include <vector>

vector<int> numbers;

또는

vector<int> numbers(10);

특징

  • 크기 자동 관리
  • 동적 확장 가능
  • 메모리 자동 해제
  • 배열처럼 사용 가능
numbers.push_back(10);

cout << numbers[0];

정리

  • 배열은 같은 자료형의 데이터를 연속된 메모리에 저장하는 자료구조이다.
  • 인덱스는 0부터 시작한다.
  • 일반 배열은 크기가 고정된 정적 배열이다.
  • 정적 배열은 보통 스택 영역에 생성된다.
  • 실행 중 크기를 정하려면 동적 배열(new)을 사용해야 한다.
  • VLA는 일부 컴파일러만 지원하며 C++ 표준이 아니다.
  • newmalloc은 힙 영역을 사용한다.
  • 현대 C++에서는 동적 배열 대신 std::vector 사용을 권장한다.

'c++ > 기초' 카테고리의 다른 글

함수  (0) 2026.05.29
구조체  (0) 2026.05.29
반복문  (0) 2026.05.29
switch  (0) 2026.05.29
조건문(if, else, else if)  (0) 2026.05.29