[C언어] 함수의 매개변수 배열,포인터

ET의 공부/C언어|2021. 1. 3. 21:50

함수의 매개변수로 배열 사용법

배열을 함수의 전달 인자로 사용하려면 배열의 변수명은 첫 번째 원소의 주소값이기 때문에 매개변수의 타입은 포인터가 되어야 합니다.

    void 함수명(int * arr){
        
    }

주소(포인터)를 전달인자로 사용하지만 이러한 상황(함수 프로토타입이나 정의에서만)에서 int * arr을 대체할 수 있는 의미가 있습니다.

   void 함수명(int * arr){
        
    }
    
   void 함수명(int arr[]){
        
    }

int * arr 과 int arr[]은 동일한 의미를 지닙니다.

 

#include <stdio.h>
#define Size 10

void Arrprint(int *Arr);
void Arrprint2(int Arr[]);

int main () {
    int i_arr[Size] = {1,2,3,4,5,6,7,8,9,10};
    Arrprint(i_arr);
    Arrprint2(i_arr);
    return 0;
}

void Arrprint(int *Arr){
    for(int i = 0; i<Size; i++){
        printf("%d ",Arr[i]);
    }
    printf("\n");
}

void Arrprint2(int Arr[]){
    for(int i = 0; i<Size; i++){
        printf("%d ",Arr[i]);
    }
    printf("\n");
}

//1 2 3 4 5 6 7 8 9 10 
//1 2 3 4 5 6 7 8 9 10 

 

위 코드에서 int * arr 과 int arr[]가 같은 기능으로 동작하는 것을 확인할 수 있습니다.

 

포인터 매개변수 사용

위의 코드에서는 #define Size 10로 정의된 배열의 크기를 이용하였지만 크기가 각각인 경우에는 전달 인자로 시작과 끝의 주소를 갖는 두 개의 포인터를 사용하여 처리를 할 수 있습니다.

 

#include <stdio.h>
#define Size 10

void Arrprint(int *Arr, int *ArrEnd);


int main () {
    int i_arr[Size] = {1,2,3,4,5,6,7,8,9,10};
    Arrprint(i_arr,i_arr+Size);
  
    return 0;
}

void Arrprint(int *Arr, int *ArrEnd){
    while(Arr<ArrEnd){
        printf("%d ",*Arr);
        Arr++;
    }
    printf("\n");
}
//1 2 3 4 5 6 7 8 9 10 

 

위의 코드에서는 void Arrprint(int *Arr, int *ArrEnd) 전달 인자로 Arr(첫 번째 원소 위치), ArrEnd(마지막 원소 위치)를 입력받으며

호출 시에는 Arrprint(i_arr,i_arr+Size);로 +Size를 해줌으로써 끝의 원소 주소 값을 전달하게 됩니다. 그 후 Arr++로 다음 원소의 값을 가리키게 만들어줍니다. 

'ET의 공부 > C언어' 카테고리의 다른 글

[C언어] 포인터 연산  (0) 2021.01.03
[C언어] 포인터와 배열  (0) 2021.01.03
[C언어] 이차원 배열  (0) 2020.12.29
[C언어] 배열 그리고 배열 초기화  (0) 2020.12.29
[C언어] 포인터 알아보기  (0) 2020.12.22

댓글()