局部变量的全局变量(for中的局部变量)
#include <cstdio>
int main(int argc, char *argv[]) {
int i = 520;
printf("before: i = %d\n", i);
for (int i = 0; i < 10; i++) {
printf("%d \n", i);
}
printf("after: i = %d\n", i);
/*
before: i = 520
0
1
2
3
4
5
6
7
8
9
after: i = 520*/
return 0;
}
全局变量
#include <stdio.h>
int count = 0;
void a();
void b();
void c();
void a(){
count++;
}
void b(){
count++;
}
void c(){
count++;
}
int main(){
a();
b();
c();
printf("小郭今天被爆了%d次",count);
return 0;
}
全局变量和局部变量
#include <stdio.h>
void func();
int a, b = 520;
void func(){
int b;
a = 880;
b = 120;
printf("In func, a = %d, b = %d\n", a, b);
}
int main(){
printf("In main, a = %d, b = %d\n", a, b);
func();
printf("In main, a = %d, b = %d\n", a, b);
return 0;
/* result:
In main, a = 0, b = 520
In func, a = 880, b = 120
In main, a = 880, b = 520*/
}
如果函数内部出现一个和全局变量重名的局部变量,编译器并不会报错,而是在函数中屏蔽全局变量
extern
#include <stdio.h>
void func();
void func(){
extern int count;
/*修饰符extern用在变量或者函数的声明前,
* 用来说明“此变量/函数是在别处定义的,要在此处引用”。*/
count++;
}
int count = 0;
int main(){
func();
printf("%d\n", count);
return 0;
}
不要使用大量的全局变量
1.使用全局变量会占用更多内存,因为全局变量从被定义时开始,直到程序退出才释放
2.污染命名空间,虽然局部变量会屏蔽全局变量,但这也会降低程序可读性,难以判断变量的含义和作用范围
3.提高了程序的耦合性,不清楚全局变量被哪个函数修改过