C++

배열을 매개변수로 받는 함수 안에서 배열의 크기 구하기

강병곤 2024. 3. 3. 22:41

배열의 크기를 구하기 위해서 아래와 같은 방법을 사용했다.

 

#include<iostream>

int main() {
    int arr[] = { 1,2,3,4 };
    std::cout << sizeof(arr) / sizeof(arr[0]) << std::endl;
}

 

sizeof(배열의 이름)을 하면 배열에 할당된 전체 메모리의 크기를 반환하기 때문에, 이를 배열의 요소 하나가 가지는 메모리의 크기로 나눠주면 배열의 크기를 구할 수 있었다.

 

하지만 배열을 매개변수로 받는 함수에서 매개변수로 받은 배열의 크기를 같은 방법으로 구하려고 하니 잘 되지 않았다.

 

 

#include<iostream>

int GetSizeOfArr(int arr[]) {
    return sizeof(arr) / sizeof(arr[0]) ;
}

int main() {
    int arr[] = { 1,2,3,4 };
    std::cout << GetSizeOfArr(arr) << std::endl;
}

 

arr가 함수안에서 &arr[0]과 같은 취급이어서 그런지, sizeof(arr)를 하면 이상한 값을 반환했다. int형 포인터 변수에 할당된 메모리 크기를 확인해보니 8이었다. return값이 8/4가 되어 값이 2가 나왔을 것이다.

 

그러면 함수안에서는 어떻게 배열의 크기를 잴 수 있을까?

 

놀랍게도 딱히 방법이 없는 것 같다. 함수가 배열을 매개변수로 받을 때는 포인터(0번째 인덱스의 주소값)로 받기 때문에 함수에 따로 배열의 크기를 전달해주거나, 배열의 끝에 특정한 값을 넣어서 확인 하는 방법 밖에는 없는 듯 하다.