理解C语言的局部变量、全局变量和静态局部变量

理解C语言的局部变量、全局变量和静态局部变量

1.作用域
(1)局部变量:局部作用域。它只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
(2)全局变量:全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。
(3)静态局部变量:局部作用域。它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

2.内存分配
(1)全局变量、静态局部变量都在静态存储区分配空间。
(2)局部变量在栈里分配空间。

3.生命周期
(1)局部变量:在进入局部变量所在的代码块时诞生,该代码块退出时,才死亡。
(2)全局变量:在程序开始运行之前的初始化阶段就诞生,直到程序结束,才死亡。
(3)静态局部变量:在第一次函数被调用时诞生并初始化,但在函数退出时它不死亡,而是保持其值等待函数下一次被调用,直到程序结束。

实例1:局部变量和全局变量

代码如下:

#include <stdio.h>
int a,b;	//全局变量
void fun();
int main()
{
	int i,j;
	i=6,j=3;	//i,j局部变量
	printf("(1) a=%d,b=%d\n",a,b);
	printf("(2) i=%d,j=%d\n",i,j);	
	for(int i=0;i<3;i++)//i局部变量
	{
		printf("(3) i=%d,j=%d\n",i,j);
	}
	printf("(4) i=%d,j=%d\n",i,j);
	a=5;b=-3;
	printf("(5) a=%d,b=%d\n",a,b);//全局变量a,b			
	fun();
}
int p,q;	//全局变量
void fun()
{	
	printf("(6) p=%d,q=%d\n",p,q);
	printf("(7) a=%d,b=%d\n",a,b);	
	int a=4,b=2;	//a,b局部变量
	printf("(8) a=%d,b=%d\n",a,b);	//局部变量a,b		
}

运行结果:
在这里插入图片描述

实例2 局部变量、全局变量和静态局部变量

#include <stdio.h>
int a,b,c;	//全局变量
void fun();
int main()
{
	int i;
	printf("(1) a=%d,b=%d\n",a,b);
	c=2;
	for(i=0;i<5;i++)
	{
		fun();
	}
	a=5;b=-3;	//局部变量
	printf("(2) a=%d,b=%d\n",a,b);	
	printf("(3) c=%d\n",c);		
}
void fun()
{	
	static int c=8,d;//静态局部变量
	printf("(f.1) c=%d,d=%d\n",c,d);	
	c++;d++;							
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值