Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- javascript
- Adapter
- fragment
- 안드로이드
- 함수 인자
- textContent
- 생명주기
- string
- 230508
- 프래그먼트
- 부가데이터
- Class
- intent
- null-safety
- querySelector
- putextra
- ViewPager
- classList
- html
- C++
- DOMContentLoaded
- serializable
- 230510
- Flutter
- parcelable
- DFS
- ActionBar
- 인텐트
- 230503
- 데이터 타입
Archives
- Today
- Total
나만의 개발노트
[C++] 함수 인자로 "배열"을 전달할 때, 포인터 vs 참조 방법 본문
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 |