c언어 함수에 관한 질문..!

조회수 66회
#include <stdio.h>

int func(int a, int b)
{
    return a + b;
}

int main()
{
    int a, b, sum;
    sum = func(scanf("%d", &a), scanf("%d", &b));  // 왜 각각의 값이 1로 변하는가

    printf("%d", sum);    // 2 출력

}

sum = func(scanf("%d", &a), scanf("%d", &b)); 을 통해 a와 b에 값을 입력해줘도 함수 func()의 매개변수 a와 b의 값이 둘다 1로 변할까요??

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    서로다른 함수안에서는 지역변수 이름이 같아도 같은 변수가 아닙니다.

    main 함수에서 선언된 int a, b는 main 함수내에서만 존재하는 지역변수입니다.

    반면에 func의 매개 변수 int a, b는 func 함수내에서만 존재하는 지역변수입니다.

    scanf함수는 서식 지정을 해서 키보드로부터 입력을 받을수가 있는데, 이 함수는 서식을 제대로 입력받은 횟수를 반환값으로 반환합니다.

    따라서 정수를 제대로 입력했다면 scanf("%d", &a)의 반환값은 1입니다.

    결국 func(scanf("%d", &a), scanf("%d", &b));은 정수를 두번 제대로 입력했다면 func(1, 1);로 실행한 것과 같습니다.

    • 참고로 scanf("%d %d %d", &a, &b, &c);를 실행하고 3개의 정수를 제대로 입력했다면 이때 함수는 3을 반환합니다. 제대로 입력해서 변환서식과 제대로 매칭된 갯수를 반환합니다. cheolsu 2022.8.3 19:13
    • 오호 감사합니다! 저는 sum = func(scanf("%d", &a), scanf("%d", &b)); 이 부분에서 a와 b의 값을 입력하면 그 값이 인자로써 func의 매개변수로 전달될 것이라고 생각을 했었어요..! 다시 곰곰히 생각해보니까 scanf() 함수로는 값이 입력될지라도 매개변수에 전달되는 값은 a의 값이 아니라 scanf()로 입력을 받은 횟수겠군요.. 해바라기 2022.8.5 11:37

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.