2014-07-13 3 views
0

나는이 질문을하고 있었고 나는 의심이있다. 그것은이와 어떻게됩니까이것의 출력은 무엇입니까?

fun (i = 5) 

에 도달 할 때

#include <stdio.h> 
int main(void) 
{ 
    int fun (int); 
    int i=3; 
    fun(i=fun(fun(i))); 
    printf("%d\n",i); 
    return 0; 
} 

int fun (int i) 
{ 
    i++; 
    return(i); 
} 

나는 의심의 여지가? 나는 6의 가치가 될 것인가 아니면 5가 될 것인가. 나에 따르면, 그것은 6이어야한다. 그러나 그것은 정답이 아니다.

+10

어떨까요? – MightyPork

+0

i == 5 일 때 fun (i) 결과를 지정하지 않으므로 업데이트되지 않습니다. –

+0

@MightyPork, 이것은 시험 중 하나에서 제기 된 이론적 인 질문이었습니다. 나는 쉽게 달릴 수 있지만 그 뒤에있는 개념을 알고 싶다. :) – user3797829

답변

1

fun()에 대한 호출 결과는 i에게 할당되지 않습니다. 따라서 5이 예상됩니다. 6이 아닙니다.

6

C에서 매개 변수는 값으로 전달됩니다. 주 함수의 변수 iifun()과 실제로 다릅니다. 함수에 전달 될 때 그 값이 복사되기 때문입니다.

i = fun(fun(i))으로 전화 할 때 5는 주 기능에서 i으로 할당됩니다. 그러나 fun(5)이 6을 반환하면 i에 결과가 다시 할당되지 않고 그대로 유지됩니다. 출력이 인쇄되면 i은 여전히 ​​5입니다.

1

이것은 범위와 관련이 있습니다. 함수 범위에서 해당 범위 또는 전달되는 매개 변수에 정의 된 변수는 포인터가 아닌 경우 외부 범위 변수에 영향을 미치지 않습니다. 따라서 fun의 출력은 fun(i = 5)i에 할당되지만 fun의 내부 연산은 외부 범위 i에 영향을 미치지 않습니다. 따라서 마지막 전화가 fun 전과 같이 유지됩니다. 출력은 5입니다.