我正在做这个问题,我有一个疑问。
#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);
}
我怀疑它何时进入
fun ( i = 5 )
这会怎么样? i的值是6还是5。 据我说,它应该是6.但这不是正确的答案。
答案 0 :(得分:6)
在C中,参数按值传递。主函数中的变量i
实际上与i
内的fun()
不同,因为它的值在传递给函数时被复制。
当您致电i = fun(fun(i))
时,主要功能中的5被分配到i
。但是,对返回6的fun(5)
的调用不会将其结果分配回i
,而是保持不变。打印输出时,i
仍为5.
答案 1 :(得分:1)
调用fun()
的结果未分配给i
。因此,5
是预期的,而不是6
。
答案 2 :(得分:1)
这与范围有关。在函数作用域中,除非是指针,否则在该作用域中定义的变量或传入的参数对外部作用域变量没有任何影响。因此,fun
的输出将分配给i
中的fun(i = 5)
,但fun
的内部操作不会影响外部范围i
。所以它保持在fun
最后一次调用之前。输出为5
。