#include <stdio.h>
static int var1=0;
int var2=3;
int var3=6;
void f(int var2)
{
static int i=0;
int j=9;
int var1;
i++;
j--;
var1=5;
var2=6;
var3=8;
}
int main(){
int var2;
var2=5;
f(var2);
f(var1);
f(var3);
return 0;
}
麻烦解释一下!高分求谢!
我不明白的是var3也是传递数值,为什么他的值会被f改变呢
追答var3是最好理解的,int var3的定义语句只在开头定义全局变量的时候使用过,在主函数中并未定义var3或重新赋值,所以var3的初始值为6。
由于var3是全局变量,同样的在F中也并未重新定义var3,只是对var3重新赋值,即var3=8,所以全局变量var3=8。
给几点实例提示:
A例:如果在函外部和内部都定义过同一变量名,优先采用函数内部的定义的变量。
int kk = 10;
f(int a){
a++;
}
main(){
int kk = 1;//注意,此句重新定义了kk,可以将这句的kk看做是一个新的变量,比如是aa等,与开头定义的KK是两个不同的变量,作用范围只在重新定义的函数中
kk = f(kk);
printf("%d",kk); //这里kk=2;
}
B例:范围(特别注意:当两个printf要输出同一变量名时,但又不在同一函数中极有可能会出错,所以建议一般是只使用一条printf语句,其余的注释)
int kk = 10;
f(int a){
a++;
printf("%d",kk); //这里kk=10;
}
main(){
int kk = 1;//作用范围只在重新定义的函数中,出了这个范围则采用的是开头定义的全局变量KK
kk = f(kk);
//printf("%d",kk); //这里kk=2;
}
C例:如果仅在函外部定义过同一变量名,则此值采用函数外部定义的变量。
int kk = 10;
f(int a){
a++;
printf("%d",kk); //这里kk=2;因其在主函数中重新赋值过
}
main(){
kk = 2;//注意,此句只是赋值并未重新定义kk只是将第一句的kk重新赋值为kk=2,若是主函数中并没有这一句,则结果kk=11.
kk = f(kk);
//printf("%d",kk); //这里kk=3
}