반응형

저번 시간에 배열과 포인터가 매우 흡사한 것을 확인했습니다. 배열을 꼭 포인터를 이용해서 처리할 필요는 없습니다. 하지만 배열을 인수로 줘서 함수의 매개변수로 이용하려면 포인터가 필요합니다.

 

반응형

배열의 값을 출력하는 함수

배열의 값을 확인하기 위해 출력해야 하는 일이 많다면 그 기능을 함수로 만들어 호출하면 됩니다. 이때 배열의 시작 주소(첫 번째 배열 요소의 시작 주소)만 알면 나머지 배열 요소는 포인터 연산으로 모두 사용할 수 있습니다. 이때, 배열명이 곧 배열의 시작 주소이기 때문에 배열명을 인수로 줄 수 있습니다.

 

#include <stdio.h>

void print_arr(int *pa);

int main(void){
    int arr[3] = {10, 20, 30, 40, 50};

    print_arr(arr);

    return 0;
}

void print_arr(int *pa){
    int i;

    for(i = 0; i < 5; i++){
    	printf("%5d", pa[i]);
    }
}

 

위 예제는 배열 arr를 출력함수의 인수로 줘서 arr의 요소를 출력하는 코드입니다. 함수를 호출할 때는 배열명을 인수로, 함수 정의할 때는 포인터 변수를 사용하는 것을 확인하실 수 있습니다. 시작 주소와 요소의 크기(포인터 자료형)를 받은 print_arr 함수는 이를 이용해서 main 함수의 배열 arr의 요소를 출력할 수 있습니다.

 

이때, 배열 출력 함수(print_arr)를 크기가 다른 배열을 인수로 호출해야 한다면 sizeof를 이용해 배열의 요소 개수를 구한 뒤, 이를 인수로 넣어 출력할 수 있습니다. 

 

#include <stdio.h>

void print_arr(int *pa, int size);

int main(void){
    int arr1[5] = {1, 2, 3, 4, 5};
    int arr2[7] = {10, 20, 30, 40, 50, 60, 70};

    int size1 = sizeof(arr1)/sizeof(arr1[0]);
    int size2 = sizeof(arr2)/sizeof(arr2[0]);

    print_arr(arr1, size1);
    print_arr(arr2, size2);

    return 0;
}

void print_arr(int *pa, int size){
    int i;

    for(i = 0; i < size; i++){
    	printf("%5d", *(pa + i));
    }

    printf("\n");
}

 

실행 결과

    1    2    3    4    5
   10   20   30   40   50   60   70

 

위 예제는 크기가 다른 두 배열과 배열의 크기를 하나의 함수를 이용해서 출력하는 코드입니다. sizeof 연산자를 이용하면 배열 요소의 개수를 알 수 있습니다. (sizeof(배열)/sizeof(배열 요소) = 배열의 크기/배열 요소의 크기 = 배열 요소 개수)

반응형