• 프로그래밍 언어 활용 part 1 - 함수의 인자

    2021. 8. 1.

    by. 고구마달랭이

    함수의 인자

    [학습내용] [학습목표]
    ▪ 매개변수
    ▪ 다양한 인자 전달
    ▪ 함수의 매개변수 전달 방법에 대해 설명할 수 있다.
    ▪ 매개변수로 포인터, 배열, 구조체 등을 전달하는 방법을 알고 사용할 수 있다.

    매개변수

     

    1. 개념 이해

    함수에 전달하는 값 [매개변수(Parameter), 인자(Argument)]

    ▪ 함수 호출 시 함수로 값을 전달하는 목적으로 이용

     

    형식매개변수와 실매개변수

    형식매개변수(Formal Parameter) 실매개변수(Real Parameter)
    함수 정의에서 기술되는 매개변수 목록 함수 호출에서 기술되는 값 , 인자(Argument)

     

    #include <stdio.h>
    
    void add( int a, int b){		//형식매개변수
    
     a += b;
     printf(“%d”, a);
     
    }
    
    int main(){
    
     int x=5, y=3;	
     add(x, y);				//실매개변수
     return 0;
     
    }

     


     

    2. 호출 방식

     

     Call by Value(값에 의한 호출) 
    인자의 값을 함수 정의에 있는 매개변수로 복사해서 전달하는 방식

     

    #include <stdio.h>
    
    void add( int a, int b){
    
     a += b;
     printf(“ %d ”, a);
     
    }
    
    int main(){
    
     int a=5, b=3;
     add(a, b);
     
     printf(“ %d ”, a);
     
     return 0;
    }

     

     

     Call by Reference(참조에 의한 호출) 
    ▪ 인자의 참조값을 함수 정의에 있는 매개변수로 전달하는 방식
    ▪ 변수의 값을 복사해서 전달하는 대신 변수의 주소를 전달하는 방식
    #include <stdio.h>
    
    void add( int* a, int* b){
    
     *a += *b;
     printf(“ %d ”, *a);
     
    }
    
    int main(){
    
     int a=5, b=3;
     add(&a, &b);
     
     printf(“ %d ”, a);
     return 0;
    }

     

     Call by Reference(참조에 의한 호출) 
    ▪ 호출된 함수에서 값을 호출한 곳으로 리턴의 용도로 사용 가능
    #include <stdio.h>
    
    int add( int a, int b){
    
     a += b;
     printf(“ %d ”, a);
     
     return a;
    }
    
    int main(){
    
     int a=5, b=3;
     a = add(a, b);
     
     printf(“ %d ”, a);
     return 0;
    }
    
    -------------------------------------------
    
    #include <stdio.h>
    
    int add( int a, int b){
    
     a += ++b;
     printf(“ %d ”, a);
     
     return a;
    }
    
    int main(){
    
     int a=5, b=3;
     a = add(a, b);
     
     printf(“ %d %d ”, a,b);
     return 0;
    }
    
    -------------------------------------------
    
    #include <stdio.h>
    
    void add( int* a, int* b){
    
     *a += ++*b;
     printf(“ %d ”, *a);
    }
    
    int main(){
    
     int a=5, b=3;
     add(&a, &b);
     
     printf(“ %d %d ”, a, b);
     return 0;
    }

    다양한 인자 전달

     

    1. 배열 전달

    배열은 포인터 전달 방법을 이용

    함수의 매개변수는 배열의 원소에 대한 포인터형으로 선언

     


     

    1. 구조체 전달

    struct tax {
    
     int value;
     int price;
     double rate;
    };
    
    void sub(struct tax a ){
     …·
    }
    
    int main(){
    
     struct tax elec={300, 2700, 5.7];
     sub( elec );
     
     return 0;
    }

     

    구조체 전달 시 포인터 전달의 장점
     주소 보관을 위한 4바이트만 사용함

     

    struct tax {
    
     int value;
     int price;
     double rate;
    };
    
    void sub(struct tax *a ){
     ….
    }
    
    int main(){
    
     struct tax elec={300, 2700, 5.7];
     sub( &elec );
     
     return 0;
    }

     

    #include <stdio.h>
    
    typedef struct tax {
    
     int value;
     int price;
     double rate;
     
    }TAX;
    
    void sub( TAX *a ){
    
     printf("%f", a->value*a->
     	price*a->rate);
    }
    
    int main(){
    
     TAX elec={300, 2700, 5.7};
     sub( &elec );
     
     return 0;
    }

     

     

     


     

     

     

    학습정리

     

    1. 매개변수

    ▪ 형식매개변수란 함수의 원형에 기술되는 매개변수 리스트를 말함

    ▪ 실매개변수는 함수 호출 시 기술되는 매개변수를 말함

    값에 의한 호출은 값만을 전달하고 함수에서 복사해서 사용함

    참조에 의한 호출은 참조할 정보, 즉 주소를 전달하여 함수에서 주소로 참조하는 전달 방식임

     

     

    2. 다양한 인자 전달

    ▪ 배열을 함수의 매개변수로 전달할 때는 배열명을 전달하여 배열의 시작 주소가 전달되도록 함

    구조체는 구조체 자체를 전달하는 것보다 구조체 시작 주소를 전달하여 함수에서 주소로 참조하도록 하는 것이 좋음

    구조체나 구조체 배열을 참조에 의한 호출로 매개변수를 전달하면 메모리 사용에 유리함

    댓글