局部变量与全局变量

54 阅读2分钟

1.局部变量

如下一段代码:

void f(){
	int a = 1;
	printf("%d", a);
}

int main(){
	
	f();
	printf("%d", a);
}

运行结果如下:

image.png

错误原因:

因为a是在函数段f里面定义的变量,譬如其他公司or班级的东西,不能被另一段函数(公司or班级)拿来使用。

这种变量就叫做局部变量

2.全局变量

如下一段代码:

int a = 100;

void f(){
	a = 200;
	printf("f:  %d", a);
}

int main(){
	f();
	printf("main:  %d", a);
}

运行结果如下:

image.png

此时因为在所有代码段外定义了一个变量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);
}

运行结果如下:

image.png

可以看到:

即使在函数外定义了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