C语言的四种变量的理解

1.内存解析

内存解析

2.局部变量
什么是局部变量呢?

(1)用英文auto修饰 但一般都是省略不写,看见auto不要陌生
(2)凡是定义在函数内部的都是局部变量,只在函数内部有效,出了函数就没用了
(3)还有就是一些复合语句有用,比如说 for循环里面的,while循环,if语句等等

(4)如果没有定义初值,系统就会分配给他一个随机值

随机值

说明:可以看出局部变量在出函数生命周期就已经结束了,怎么结束的呢,结束效果是什么呢?
不着急,我来演示,上代码

可以看到 在main函数进入程序之后,我们定义了一个整形a,赋值为10,然后调用了上面的这个hanshu()函数 为什么不是20呢,还是10呢?

分析一下内存解析

在这里插入图片描述

总结:从中可以看出,局部变量的生命周期就是在函数里面,出了函数就没了。

全局变量
那么什么是全局变量呢?

全局变量是定义在全局区的,它的生命周期是在程序结束时才死亡。
上代码!
在这里插入图片描述

可以看到 main函数并没有定义a,却能打印出a的值,什么过程呢?

上面说了,全局变量不会随着函数的死亡而死亡,在全局区一直保存着

在这里插入图片描述

如果没初始化,系统默认为0,区别于局部变量会随机给个数
常常伴随extern使用,在别的地方想用这个全局变量a 就加上extern int a;这个可以声明多次,但是定义的时候只能定义一次,就是说,int a;只能有一个;

静态局部变量
说了局部变量和全局变量 ,那么看看静态局部变量和全局变量有什么区别呢?
静态局部变量和局部变量都是随着函数死亡而死亡

在这里插入图片描述
在这里插入图片描述

Hanshu1()的调用过程 //普通局部变量
调用的第一次,在栈空间开辟一个int型空间变量a,a = 1,a++,变成2,打印 2
调用完,函数结束,a生命周期结束
调用第二次,重新定义一个a=1,a++,变成2,打印2
调用完,函数结束,a生命周期结束
调用第三次一样 所以结果是 2 2 2

Hanshu2()的调用过程 //静态局部变量
调用第一次,在静态区开辟一个int型空间变量a ,a=1,a++,变成2 打印2
调用完,函数生命周期结束了,但是静态区仍然会保留a的值,
调用第二次,因为静态局部变量只会定义一次,第二次调用函数的时候,这个定义初始化操作 static int a = 1;就不执行了 直接a++,所有a=3,打印3
调用第三次,同上,打印4

还有就是静态局部变量和全局变量一样 ,都是默认初始化为0,这里为0,是因为是int型,如果是char型,那就是空

静态全局变量(了解即可)
生命周期都是程序结束才结束
全局变量是所有文件都能用,只要用extern声明即可,
但是static修饰的静态全局变量,只适用于当前文件,其他文件不能使用,即使是两个文件重名了,两个变量也是两个变量,两者毫无关系。
而全局变量两个文件不可以重名。
初始化问题和全局变量一样

别谢我!千万别谢!
不用谢~~~~~~~~~~~
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值