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 |
Tags
- Class
- const
- Python
- 티스토리챌린지
- Data Science
- 반복문
- 포인터
- 오블완
- 문자열
- 백준
- string
- raw data
- predictive analysis
- OOP
- array
- C++
- baekjoon
- pointer
- vscode
- 알고리즘
- Deep Learning
- programming
- Object Oriented Programming
- 파이썬
- assignment operator
- Pre-processing
- 함수
- pass by reference
- function
- 배열
Archives
- Today
- Total
Channi Studies
[C++] 함수에 배열을 매개변수로 사용할 때 (Passing Arrays To Functions) 본문
C++/함수 (Function)
[C++] 함수에 배열을 매개변수로 사용할 때 (Passing Arrays To Functions)
Chan Lee 2023. 12. 17. 22:59Intro
C++에서 배열을 함수에 전달할 때 다음과 같은 형태로 작성하곤 합니다:
void print_array(int numbers []);
하지만 여기에는 주의할 점이 있습니다.
1. 배열을 함수에 전달할 때의 특징
C++에서 배열을 함수에 전달하면, 다른 기본 자료형과는 달리 배열 전체가 복사되어 전달되지 않습니다.
int my_numbers[] = {1, 2, 3, 4, 5};
print_array(my_numbers); // 배열의 첫 번째 요소의 주소가 전달됨
• 배열 이름은 배열의 시작 주소를 나타냅니다.
• 따라서 함수는 (현재로서는) 배열의 크기를 알 수 없습니다.
• 즉, 반복문으로 몇 번 순회해야 하는지도 모릅니다.
2. 배열과 함께 크기를 전달해야 하는 이유
함수에 배열을 전달할 때는 크기(size) 도 함께 전달해야 합니다.
배열의 요소들을 전부 출력하는 print_array 함수를 구현해보겠습니다.
❌ 잘못된 예
void print_array(int numbers[]); // 배열만 받고 크기 정보 없음
int main() {
int my_numbers[] = {1, 2, 3, 4, 5};
print_array(my_numbers);
}
함수 내부에서는 배열의 크기를 알 수 없으므로 문제가 됩니다.
✅ 올바른 예
void print_array(int numbers[], size_t size);
int main() {
int my_numbers[] = {1, 2, 3, 4, 5};
print_array(my_numbers, 5);
}
void print_array(int numbers[], size_t size){
for (size_t i = 0; i < size; i++) {
cout << numbers[i] << endl;
}
}
배열의 크기를 함께 전달함으로써
size_t 는 음수가 될 수 없는 정수형으로, 인덱스나 크기를 나타낼 때 자주 사용됩니다.
그렇다면, 배열의 크기를 명시적으로 기재하지 않고 함수 내에서 자체적으로 알아내는 방법은 없을까요? 🤔💭
3. 배열 크기 자동 계산법 (주의)
다음 코드는 배열의 크기를 자동으로 계산하는 대표적인 방법입니다:
int size = sizeof(arr) / sizeof(arr[0]);
⚠️ 하지만 이 방식은 함수 내부에서는 동작하지 않습니다.
배열이 함수로 전달되면 단순히 포인터로 인식되기 때문에, sizeof(arr) 는 전체 배열 크기를 알 수 없습니다.
다시 정리하자면, 인자로 전달받은 배열은 함수 내에서 그 크기를 알 수 없습니다.
배열을 함수에 전달할 때 알아둘 점이 더 있습니다.
4. 함수 내에서 배열을 변경하는 법
배열은 주소만 전달되므로, 함수 내부에서 배열의 내용을 직접 변경할 수 있습니다.
마치 Pass by reference처럼 동작합니다.
💡 예시
void zero_array(int numbers[], size_t size) {
for (size_t i = 0; i < size; i++) {
numbers[i] = 0;
}
}
이 함수는 전달된 배열의 모든 값을 0으로 바꿉니다.
int main() {
int my_numbers[] = {1, 2, 3, 4, 5};
zero_array(my_numbers, 5); // 원본 배열 값이 바뀜
}
5. 원본 배열의 변경을 막고 싶다면? const
배열을 읽기 전용으로 전달하고 싶다면 const 키워드를 사용하세요:
void print_array(const int numbers[], size_t size) {
for (size_t i = 0; i < size; i++) {
cout << numbers[i] << endl;
}
// numbers[i] = 0; ← 컴파일 에러!
}
const가 붙으면, 배열의 값을 읽을 수만 있고 수정할 수 없습니다.

요약
항목 | 설명 |
배열 전달 방식 | 배열의 주소가 전달됨 (복사가 아님) |
크기 정보 | 함수에 명시적으로 크기를 함께 전달해야 함 |
값 수정 여부 | 배열은 기본적으로 함수 내부에서 수정 가능 |
수정 방지 방법 | const 키워드 사용하여 읽기 전용으로 전달 |
'C++ > 함수 (Function)' 카테고리의 다른 글
[C++] 함수에서 포인터를 반환하기 (Returning a Pointer from a Function) (1) | 2023.12.22 |
---|---|
[C++] 재귀 함수 (Recursive Function) (0) | 2023.12.18 |
[C++] 참조로 전달하기 (Pass by Reference) (1) | 2023.12.17 |
[C++] 함수 오버로딩 (Function Overloading) (1) | 2023.12.17 |
[C++] 함수 프로토타입 (Function Prototype) & 디폴트 매개 변수 (Default Argument Values) (0) | 2023.12.16 |