[C++] C++ 배열 사이즈 오류, 구하기 (함수에서)

1 분 소요

c++ 배열 크기 구하기

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

int size1 = sizeof(a)/sizeof(a[0]); // 5
int size2 = sizeof(a)/sizeof(int);  // 5

c++에서 배열의 크기를 구하기 위해서는 위 코드처럼 sizeof(a)/sizeof(a[0])으로 전체 배열 크기를 첫번째 원소로 나누는 방식으로 구할 수 있다.

혹은 전체배열 크기를 배열의 자료형으로 나누면 배열 크기를 구할 수 있다.

하지만 이 방법으로 배열의 크기를 구하는건 main함수에서만 유효하다.

c++ 함수 매개변수에서 배열 크기 오류

#include<iostream>
using namespace std;

int arraysizeTest(int array [])
{
	return sizeof(array)/sizeof(array[0]);
}

int main(){
	int array1[]={1};
	cout<<"array1 size in main : "<<sizeof(array1)/sizeof(array1[0])<<endl;
	cout<<"array1 size in func : "<<arraysizeTest(array1)<<endl;
	cout<<"--------------------------------"<<endl;
	int array2[]={1,2};
	cout<<"array2 size in main : "<<sizeof(array2)/sizeof(array2[0])<<endl;
	cout<<"array2 size in func : "<<arraysizeTest(array2)<<endl;
	cout<<"--------------------------------"<<endl;
	int array3[]={1,2,3,4,5,6,7,8,9,10};
	cout<<"array3 size in main : "<<sizeof(array3)/sizeof(array3[0])<<endl;
	cout<<"array3 size in func : "<<arraysizeTest(array3)<<endl;
	cout<<"--------------------------------"<<endl;
}
array1 size in main : 1
array1 size in func : 2
--------------------------------
array2 size in main : 2
array2 size in func : 2
--------------------------------
array3 size in main : 10
array3 size in func : 2
--------------------------------

함수를 작성해 매개변수로 배열을 넘겨받아 위 방식으로 크기를 구하게 되면 무조건 2가 출력된다.

그 이유는 배열이 함수로 넘어갈 때 포인터로 넘어가 배열의 size값이 안 넘어가기 때문이다.

c++ 함수 매개변수로 넘어온 배열 크기 구하기

void myfunction(int array [], int size)
{
    ...
}

int main(){
    int a[]={1,2,3,4,5};
`   myfunction(a, sizeof(a)/sizeof(a[0]));
}

여러 방식이 있을 수 있겠지만 위 코드처럼 그냥 함수 매개변수로 배열이 사이즈를 함께 넘겨주면 된다.

태그: ,

카테고리:

업데이트: