在函数里边定义的叫局部变量;在函数外边定义的叫外部变量,也叫全部变量
#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、提高了程序的耦合性,牵一发而动全身,时间久了,代码长了,自己可能不知道全局变量被哪些函数修改过










