C语言第七章局部变量和全局变量

局部变量和全局变量

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

void func1(int temp); 

int p = 1,q = 5;  //这是全局变量 在函数外边定义的变量 
//全局变量 可以为本文件中其他函数所共用
//范围:
//从定义变量的位置开会到本源程序文件结束 
//如果整个文件开头定义了该变量 则整个文件范围内都可以使用该变量 
//在一个函数中 既可以使用本函数中的局部变量 又可以使用 -有效- 的全局变量

//全局变量的优缺点:
//优点:增加了函数与函数之间的数据联系的渠道 如果一个函数中改变了全局变量的值 就能影响到其他函数\
//相当于在各个函数之间有个直接的传递通道 不再需要通过实参和形参来传递数值了
//缺点:只有在必要的时候才使用全局变量(所以谨慎使用) 因为全局变量在程序运行整个周期之间占用内存 而不像函数内的局部变量
//函数内局部变量的特点是 当函数变量所占内存会被系统回收 
//降低了函数的通用性 函数执行时 要依赖这些全局变量了 如果函数迁移到另外一个文件中 那这些相关的外部变量就得一起迁移过去
//东一个全局变量 西一个全局变量 降低了程序的清晰性和可读性 读程序的人难以清除的判断每个瞬间各个外部变量的值(因为很多函数都可以改变这个外部变量的值) 
//所以我们要限制全局变量的使用 


int f1(int a){
	//不能使用c1 c2 但是可以用p q
	p = 800;
	int b,c;
	return 1; 
}
//外部变量说明,表示某一个地方定义了c1 c2这两个全局量 
extern char c1,c2;//定义时分配内存 
void lookvalue(){
	c1 = 1;//给全局变量赋值 
	c2 = 8;
	return;
} 
char c1,c2;//全局变量 
char f2(int x,int y){
	//p q c1 c2都可以用 
	int i,j;
	return 0;
}
int main(int argc, char *argv[]) {
	
	//局部变量和全局变量
	//局部变量:在一个函数的内部定义一个变量叫局部变量 他只是在本函数内有效 也就是说 只是在本函数内才能使用
	//在本函数外面就不可以使用本函数
	int m,n;
	int k = 4;//这都是局部变量 
	
	//主函数(main)中定义的变量中 m,n,k只在主函数中有效 
	//虽然主函数调用了其他函数 但是在其他函数中 依旧无法使用主函数中定义的变量
	func1(k); 
	
	//不同的函数可以使用相同的变量名,互不干扰。
	//形参temp(在下面)也是局部变量 他也只在func()有效 在其他函数里不能调用 
	//有一些特殊写法:能读懂就行 
	int x,y;
	//...、
	//一段代码段 复合语句中定义变量 这些变量仅仅在此复合语句中有效 这种复合语句也叫程序块 
	{
	 int c; //只能在复合语句内有用 
	 c = x+y; 
	} 
	//c = 2; 在大括号外就不可以用 一旦离开复合语句 变量c的内存就被释放掉了 
	
	//全局变量:在函数外定义的变量,我们称之为全局变量(外部变量) 
	f1(32);
	printf("p:%d\n",p);
	
	//如果某个函数想引用在他后面的全局变量,则可以用一个关键字叫extern做一个外部变量说明
	//表示该变量在函数的外部定义 这样的函数内能够使用 否则编译就会出错 
	//全局变量的定义放在它引用函数的之前 就可以避免使用这个extern 
	//严格区分外部变量定义和外部变量说明:
	
	lookvalue();
	printf("c1:%d\n",c1); 
	
	//在同一个源文件中,如果全局变量和局部变量同名,则在局部变量作用范围内,全局变量不起作用(当然值也不受到影响)
	{
		int c1,c2;
		c1 = 100;
		c2 = 200;
		printf("c1 = %d,c2 = %d\n",c1,c2);//局部变量里的c1 c2
	}
	printf("c1 = %d,c2 = %d\n",c1,c2);//全局变量里的c1 c2
}
void func1(int temp){
	//这里无法使用main()中的定义的m,n,k; 
	int x,y;//局部变量 
	
	//这里能使用的变量是tem,x,y 都可以使用 
	
	//不同的函数可以使用相同的变量名,互不干扰。 
	int m,n; //和main中的m,n完全不同,占用的内存地址也完全不同。
	return;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值