[C언어] 함수의 전달인자

ET의 공부/C언어|2020. 12. 20. 18:57

함수의 전달인자

이전 포스팅에서 데이터 형,전달인자가 없는 함수에대해 알아보았습니다. 해당 링크는 아래와 같습니다.

by-man.tistory.com/563

 

[C언어] 함수의 작성과 사용

함수(function) C언어에서 함수(function)란 특정 작업을 수행하도록 독립적으로 설계된 코드의 한 단위입니다. 예를 들어 printf()는 화면에 데이터를 출력해주는 함수입니다. 왜 함수를 사용해야 할까

by-man.tistory.com

#include <stdio.h>

void drawbar(void); //함수 프로토 타입

int main () {
    drawbar();
    printf("*모양 막대를 그렸습니다.\n");
    drawbar();
    return(0);
}

void drawbar(void){  //함수 정의
    for(int i = 0; i<20; i++){
        printf("*");
    }
    printf("\n");
}

 

이전의 코드 drawbar() 함수는 전달인자 없이 20개의 *을 출력하는 함수입니다. 이를 전달인자를 받아 입력받은 개수만큼 *을 출력하는 함수를 만들어 보겠습니다. 

 

차이는 이전의 코드 void 부분에 전달인자를 추가해줍니다. 이는 drawbar()가 정수형 length이라는 것을 컴파일러에게 알리며 형식매개변수라 합니다 . 함수안에서 정의되는 변수와 마찬가지로 형식매개변수는 그 함수에서만 사용되기 때문에 다른 함수, main문에서 사용또한 가능합니다.

 

#include <stdio.h>

void drawbar(int length); //함수 프로토 타입

int main () {
    int length = 5;
    
    drawbar(length);
    printf("*모양 막대를 그렸습니다.\n");
    drawbar(length);
    return(0);
}

void drawbar(int length){  //함수 정의
    for(int i = 0; i<length; i++){
        printf("*");
    }
    printf("\n");
}
//*****
//*모양 막대를 그렸습니다.
//*****
#include <stdio.h>

void drawbar(int); //함수 프로토 타입, 변수 이름 생략

int main () {
    int length = 5;
    
    drawbar(length);
    printf("*모양 막대를 그렸습니다.\n");
    drawbar(length);
    return(0);
}

void drawbar(int length){  //함수 정의
    for(int i = 0; i<length; i++){
        printf("*");
    }
    printf("\n");
}
//*****
//*모양 막대를 그렸습니다.
//*****

이전 코드와 다르게 void drawbar(int length); 로 선언부에 매개변수가 추가된것을 보실수있습니다. 그런데 항상 매개변수의 자료형과 변수명을 넣어야 할까요? 

함수를 사용하기에 앞서 프로토타입을 선언해주었는데 프로토타입에서는 변수의 이름을 생략할수 있습니다.  바로위 코드와 비교해보시면 선언부에 변수명은 없고 자료형만 정의되어 있는것을 보실수있습니다. 

 

전달인자의 호출

전달인자로 입력되는 값은 함수입장에서는 상수인지, 변수인지, 표현식으로 입력이 되었는지 알수없고 상관하지도 않습니다. 다시 정의하자면 전달인자는 단순히 변수에 입력되는 값일 뿐입니다. 피호출 함수(called function)은 호출 함수(calling function)로 복사된 데이터로 작업을 하기때문에 피호출 함수안에서 데이터를 변경하더라도 호출 함수에 있는 데이터는 보호됩니다.

 

#include <stdio.h>

void drawbar(int); //함수 프로토 타입, 변수 이름 생략

int main () {
    int length = 5;
    
    drawbar(length);
    printf("*모양 막대를 그렸습니다.\n");
    drawbar(length);
    
    printf("length의 길이: %d\n",length);
    return(0);
}

void drawbar(int length){  //함수 정의
    for(int i = 0; i<length; i++){
        printf("*");
    }
    length = 0;
    printf("\n");
}
//*****
//*모양 막대를 그렸습니다.
//*****
//length의 길이: 5

 

위의 코드처럼 함수안에서 length의 값을 0으로 변경하더라도 main문에서의 length는 제값인 5를 출력하는 것을 보실 수 있습니다.

 

댓글()