有关void类型

来源:百度知道 编辑:UC知道 时间:2024/07/05 03:24:29
int m=20;
void f(int n)
{n=12/n;
m=m/2;
}
main()
{int n=3;
f(n);
printf("m=%d,n=%d\n",m,n);
}
谁知道答案到为什麽是 m=10和n=3 不是m=10和n=4?

还有 void不是设置成没有返回值得吗 为什麽会有m的值而又没有n的值呢?

这正是"按引用传递"和"按值传递"的区别
n作为参数传递给f函数,并在函数内部进行修改,但是int n是值类型变量,传递给f方法的只是它的一个副本而不是内存地址,所以无论在f内对n做任何的修改,f函数以外的n的值都保持不变.这就是按值传递.
而m是全局娈量,其作用域覆盖了f方法,且并不是作为参数传递给f方法的,所以对m的修改是有效的.

m是全局的