在函数里边定义的叫局部变量;在函数外边定义的叫外部变量,也叫全部变量
#include <stdio.h>
int main()
{
int i = 520; //这里i为全局变量
printf("before i=%d\n", i);
for (i = 0; i < 10; i++)
{
printf("i=%d\n", i); //重新定义i的值
}
printf("after i=%d", i); //还是使用全局变量定义的值
return 0;
}
在c99中,局部变量不影响全局变量,全局变量可以被本程序的其他函数所共用,如果不对全局变量进行初始化,那么他会自动初始化为0
#include<stdio.h>
void a();
void b();
void c();
int count = 0; //全局变量
void a()
{
count++; //对全局变量加一
}
void b()
{
count++; //再对全局变量加一
}
void c()
{
count++; //再加一
}
int main()
{
a(); //调用全局变量一次
b(); //加一
c(); // 加一
b(); //加一
printf("%d\n", count); //%d=4
}
如果在函数内部存在一个与全局变量重名的局部变量,编译器并不会报错,而是在函数中屏蔽全局变量(也就是说在这个函数中,全局变量不起作用)
如下例
#include<stdio.h>
int a, b = 520;
void func() //定义函数c
{
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(); //改动的局部变量,所以这里a=880,b=120
printf("In main,a=%d,b=%d\n", a, b);
//func里面改动的局部变量,不影响全局变量,但由于a没有被初始化,所以被改动,但b仍是520
return 0;
}
count在函数的定义后在定义 会报错出现count未声明标识符,这个需要需要用到extern关键字 ? extern关键字告诉编译器:这个变量我在后边定义了,先别急着报错
#include<stdio.h>
void func();
void func()
{
extern int count; //使用了extern关键字,便成功编译
count++;
}
int count = 20;
int main()
{
func();
printf("%d\n", count);
return 0;
}
最好不要大量使用全局变量!!但是有时还是很有用的
原因如下:1、使用全局变量会使你的程序占用更多的内存,因为全局变量从被定义的时候开始,直到程序退出时才被释放 ? ? ? ? ? ? ? ? ?2、忽然命名空间,虽然局部变量会屏蔽全局变量,但这样一来也会降低程序的可读性,人们往往会很难判断出每个变量的含义和作用范围 ? ? ? ? ? ? ? ? ? 3、提高了程序的耦合性,牵一发而动全身,时间久了,代码长了,自己可能不知道全局变量被哪些函数修改过
|