나만의 개발노트

[C++] 함수 인자로 "배열"을 전달할 때, 포인터 vs 참조 방법 본문

[C++]/[C++] 개념 모음

[C++] 함수 인자로 "배열"을 전달할 때, 포인터 vs 참조 방법

노트포미 2024. 6. 4. 10:48

c++에서 배열을  함수 인자로 전달하는 방법에는 두 가지가 있다

 

1.  포인터를 이용

void func(int *array, int size);

 

[장점]

  • 유연성 : 배열의 크기를 함수의 매개변수 선언에서 지정하지 않으므로, 다양한 크기의 배열을 전달할 수 있다.
  • 배열 크기의 유연성 : 함수 호출 시 배열의 크기를 명시할 필요가 없으며, 배열의 크기를 매크로 또는 상수로 관리할 수 있다.

[단점]

  • 안정성 : 배열의 크기를 명시하지 않기 때문에, 함수 내에서 배열의 범위를 벗어나는 접근을 하지 않도록 주의해야 한다.
  • 가독성 : 함수 선언부만 보고는 전달되는 배열의 크기를 알 수 없기 때문에, 코드의 가독성이 떨어질 수 있다.
  • 배열의 크기를 함께 전달해야 한다. (또는, 종료 마커 사용하기)

 


2. 참조를 이용

int func(int (&array)[N]);

 

[장점]

  • 안정성 : 배열의 크기를 명시하기 때문에, 컴파일 타임에 배열의 크기가 맞지 않는 경우 오류를 잡아낼 수 있다.
  • 가독성 : 함수 선언부에 배열의 크기가 명시되어 있어, 전달되는 배열의 크기를 쉽게 파악할 수 있다.

 

[단점]

  • 유연성 부족 : 배열의 크기를 고정하여 전달해야 하므로, 크기가 다른 배열을 동일한 함수에 전달할 수 없다.
  • 제한된 활용성 : 배열의 크기가 고정되어 있어 함수의 재사용성이 떨어질 수 있다.

<결론>

  • 다양한 크기의 배열을 전달할 필요가 있다면, 1.포인터 방법이 좋다.
  • 함수 내에서 배열의 크기가 고정되어 있고, 다른 크기의 배열을 전달할 필요가 없다면 2.참조 방법이 안전하고 가독성 있다.
  • 시간 복잡도, 공간 복잡도는 모두 O(1)이다.

#예시코드

#include <iostream>

using namespace std;

//포인터를 이용한 배열 전달 함수
void pointerFunc(int *array, int size){
	for(int i = 0 ; i < size ; i++){
    	cout << "arr["<< i << "]: " << array[i] << endl;
    }
}

//참조를 이용한 배열 전달 함수
void referenceFunc(int (&array)[size]){
	for(int i = 0 ; i < size ; i++){
    	cout << "arr[" << i << "[: " << array[i] << endl;
	}
}

int main(){
	int array[5] = {0,1,2,3,4};
    
    //포인터 함수
    pointerFunc(array);
    
    //참조 함수
    referenceFunc(array);
    
    return 0;
}

 

'[C++] > [C++] 개념 모음' 카테고리의 다른 글

[C++] 함수 인자로 "string"을 전달할 때, 값 vs 포인터 vs 참조  (0) 2024.06.04
[C] <stdio.h>  (0) 2024.05.21
[C] <string.h>  (0) 2024.05.21
[C++] vector::assign  (0) 2024.05.18
[C++] vector<T>  (0) 2024.05.17