이 글에서는 C 또는 C++에서 정수형 배열(int array)의 크기를 구하는 방법을 알아보겠습니다. 여기서 말하는 배열의 크기란 해당 배열에 들어 있는 요소(element)의 개수를 의미합니다.
sizeof() 연산자를 활용한 배열 크기 계산
배열의 크기를 구하는 가장 일반적인 방법은 sizeof() 연산자를 사용하는 것입니다. sizeof()에 배열 이름을 전달하면, 그 배열이 차지하고 있는 메모리 블록의 전체 크기(바이트 단위)가 반환됩니다.
따라서 배열 전체 크기를 배열 요소 하나의 크기로 나누면, 배열에 포함된 요소의 개수를 구할 수 있습니다. 공식으로 표현하면 다음과 같습니다.
요소 개수 = sizeof(배열) / sizeof(배열[0])
다음 예제를 통해 실제 동작을 확인해 보겠습니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
int data[] = {11, 22, 33, 44, 55, 66, 77, 88, 99, 91, 82, 73, 64};
cout << "data[]가 차지하는 메모리 크기: " << sizeof(data) << endl;
cout << "data[] 배열의 크기(요소 개수): " << sizeof(data)/sizeof(data[0]) << endl;
}실행 결과
data[]가 차지하는 메모리 크기: 52 data[] 배열의 크기(요소 개수): 13
결과 분석
위 예제에서 배열 data는 int형 요소 13개를 담고 있습니다. int형은 일반적으로 4바이트이므로, 배열 전체가 차지하는 메모리 크기는 13 × 4 = 52바이트입니다.
여기서 sizeof(data)는 52를 반환하고, sizeof(data[0])는 첫 번째 요소인 int 하나의 크기인 4를 반환합니다. 따라서 52 ÷ 4 = 13이 되어, 배열의 요소 개수를 정확히 구할 수 있습니다.
주의 사항
이 방법은 반드시 원본 배열 자체에 사용해야 한다는 점에 유의해야 합니다. 배열을 함수의 매개변수로 전달하면 배열은 포인터(pointer)로 decay되기 때문에, 함수 내부에서 sizeof()를 호출하면 배열 전체 크기가 아닌 포인터의 크기(일반적으로 8바이트)가 반환됩니다. 따라서 이 기법은 배열이 선언된 같은 범위(scope) 내에서만 올바르게 동작합니다.