산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 배열을 함수에 전달하는 방법: 실전 가이드

C++에서 배열을 함수에 전달하기

1차원/다차원 배열을 C++ 함수 인수로 전달하는 방법을 실전 코드 예제로 설명합니다.

C++에서 배열은 함수 인자로 전달 가능하며, 포인터를 통해 간접적으로 반환도 할 수 있습니다. 배열이 포인터로 붕괴(decay)되는 메커니즘과 메모리/성능 영향을 이해하는 건 효율적 코드 작성의 핵심입니다.


배열을 함수 매개변수로 전달하는 문법

배열을 받는 함수 선언 형태:

returnType functionName(dataType arrayName[arraySize]) {
    // 함수 본문
}

예:

int total(int marks[5]) {
    // 구현
}

marks는 5개 요소의 int 배열. 함수 호출 시 배열 이름(첫 요소 포인터)만 전달됩니다.


예제 1: 1차원 배열을 함수에 전달

#include <iostream>
using namespace std;
// 점수 출력 함수 선언
void display(int m[5]) {
    cout << "Displaying marks:" << endl;
    for (int i = 0; i < 5; ++i) {
        cout << "Student " << i + 1 << ": " << m[i] << endl;
    }
}
int main() {
    int marks[5] = {88, 76, 90, 61, 69};
    display(marks); // 배열 이름으로 전달
    return 0;
}

실행 결과

Displaying marks:
Student 1: 88
Student 2: 76
Student 3: 90
Student 4: 61
Student 5: 69

핵심 포인트:

  1. display(marks); 호출 시 marks[0] 주소 전달
  2. 함수 내부에서 int m[5]는 int* m;로 취급되어 같은 메모리 가리킴
  3. m[i] 수정 시 원본 marks 배열도 변경 → **참조 전달(Pass-by-Reference) 의미론**

다차원 배열을 함수에 전달

2차원 배열의 경우 컴파일러가 요소 오프셋 계산할 수 있게 **열 개수(두 번째 차원 크기)**를 명시해야 합니다.

예제 2: 2차원 배열을 함수에 전달

#include <iostream>
using namespace std;
void display(int n[][2]) {
    cout << "Displaying values:" << endl;
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 2; ++j) {
            cout << "num[" << i << "][" << j << "]: " << n[i][j] << endl;
        }
    }
}
int main() {
    int num[3][2] = {{3, 4}, {9, 5}, {7, 1}};
    display(num);
    return 0;
}

실행 결과

Displaying values:
num[0][0]: 3
num[0][1]: 4
num[1][0]: 9
num[1][1]: 5
num[2][0]: 7
num[2][1]: 1

주의사항:

고차원 배열도 같은 규칙: 첫 번째 차원 제외 모든 차원 크기 명시 필요.


함수에서 배열 반환

함수는 배열 전체를 직접 반환할 수 없습니다. 대신 **첫 요소 포인터**를 반환하며, 이는 정적 할당 배열, 동적 할당 배열, 임시 객체 등을 가리킬 수 있습니다. 로컬(스택) 배열 포인터 반환은 댕글링 참조 유발하므로 피해야 합니다.

예제 (정적 배열):

int* getArray() {
    static int arr[5] = {1, 2, 3, 4, 5};
    return arr; // 첫 요소 포인터 반환
}

동적 할당 시 std::vector<T> 반환이 안전하고 메모리 관리 자동화에 권장됩니다.

프로덕션 코드용 안전한 배열 다루기는 추가 학습 권장.

C 언어

  1. C# 가변 배열(Jagged Array): 선언, 초기화, 접근 완전 가이드
  2. C++ 연산자 마스터하기: 유형별 완벽 가이드와 실전 예제
  3. C++ 프렌드 함수와 프렌드 클래스: 접근 제어 마스터하기
  4. C 프로그래밍 연산자 완벽 가이드
  5. C++ 배열 완전 정복: 선언, 초기화, 포인터 기법
  6. C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제
  7. C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제
  8. C++ 함수 완전 정복: 실전 코드 예제로 이해하기
  9. C 프로그래밍 입문: 시스템 프로그래밍의 기초 다지기
  10. C++ 오버로딩 마스터하기: 함수 & 연산자 오버로딩 완전 정복