함수에서 배열을 인수로 사용하기

함수 헤더에서 배열 매개변수 선언

함수 헤더에서 배열 매개변수를 선언할 때에는 자료형 배열명[]의 형태로 선언헌다.

1
2
3
int func_1d(int arr[]);
int func_2d(int arr[][3]);
int func_char(char str[]);

차원에 따른 배열 매개변수 선언

  • 배열을 매개변수로 사용할 때는, 배열의 규격(크기)를 알 수 있도록 해야한다.
  • 단, 가장 바깥의 차원의 크기는 지정하지 않아도 된다.
  • 이는 첫 번째 차원은 어차피 포인터로 decay 되기 때문에 차원의 크기를 지정하는게 의미가 없기 때문이다.
  • 쉽게 말해 첫 번째 차원은 포인터가 되어버리기 때문에 크기 자체가 필요하지 않다. 따라서 생략이 가능
1
2
3
4
5
6
7
8
// 1차원 함수 헤더
int func_1d(int arr[], int n);

// 2차원 함수 헤더
int func_2d(int arr[][3], int n);

// 3차원 함수 헤더
int func_3d(int arr[][3][4], int n);

decay : 포인터로 변환

예시

1
2
3
4
5
6
7
8
int a[] = {1, 2, 3, 4};
void func_1d(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
func_1d(a, 4);
1
1 2 3 4 
1
2
3
4
5
6
7
8
9
10
int b[2][3] = {1, 2, 4, 5, 6};
void func_2d(int arr[][3], int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}
func_2d(b, 2);
1
2
1 2 3 
4 5 6 

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments