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번째 인덱스의 주소값)로 받기 때문에 함수에 따로 배열의 크기를 전달해주거나, 배열의 끝에 특정한 값을 넣어서 확인 하는 방법 밖에는 없는 듯 하다.