1.局部变量
如下一段代码:
void f(){
int a = 1;
printf("%d", a);
}
int main(){
f();
printf("%d", a);
}
运行结果如下:
错误原因:
因为a是在函数段f里面定义的变量,譬如其他公司or班级的东西,不能被另一段函数(公司or班级)拿来使用。
这种变量就叫做局部变量
2.全局变量
如下一段代码:
int a = 100;
void f(){
a = 200;
printf("f: %d", a);
}
int main(){
f();
printf("main: %d", a);
}
运行结果如下:
此时因为在所有代码段外定义了一个变量a,属于公共的,所有代码段都可以使用。但又因为在f代码段中,a被赋值成了200,所以最后在main代码段中调用的公共a也就变成了200
这种变量就叫全部变量
其他情况:
如果在void f或者main函数中重新定义了一个变量a,则函数里的打印会优先使用新定义的变量a
如下代码:
int a = 200;
int b = 100;
void f(){
int a = 1;
b = 2;
printf("f: a=%d,b=%d\n", a, b);
}
int main(){
f();
//在main函数中绝对不可能访问f中的变量,此处a为全局变量a
printf("main: a=%d,b=%d", a, b);
}
运行结果如下:
可以看到:
即使在函数外定义了a=200,在函数f中又定义了a=1,则函数内部会优先使用内部新定义的a=1。
而main函数中没有新定义a,则还是使用外部变量a=200。
同理b也是,由于将b重新赋值为2.则函数f输出为2.
而又因为>b=100已经在函数外部定义过,所以函数内部的b用的是外部定义过的b=100,只不过是将2赋值给b。
于是在main函数调用中外部的b的值变为了2