c语言中的局部变量和全局变量

在函数里边定义的叫局部变量在函数外边定义的叫外部变量也叫全部变量

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


版权声明:本文为m0_64162358原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。