鱼C论坛

 找回密码
 立即注册
查看: 2387|回复: 0

[技术交流] 《带你学C带你飞》第三十一讲:局部变量和全局变量

[复制链接]
发表于 2018-3-10 09:49:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2018-3-10 09:50 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢

一、局部变量和全局变量
(1)在开始讲解函数之前,我们所理解的变量就是在内存中开辟一个存储数据的位置,并给它起个名字。因为那时候只有一个 main 函数,所以那时我们对它的作用范围一无所知,觉得定义了变量就随时随地可以使用它……直到我们学习函数才发现,不同函数之间定义的变量,它们是无法相互进行访问的;故在函数里边定义的,我们叫局部变量

(2)在函数外边定义的,我们叫外部变量,也叫全局变量。有时候,我们可能需要在多个函数中使用共同的一个变量,那么就会用到全局变量。因为全局变量可以被本程序中其他函数所共用的。

(3)与局部变量不同,如果不对全局变量进行初始化,那么它(全局变量)会自动初始化为 0

(4)如果在函数的内部存在一个与全局变量同名的局部变量,编译器并不会报错,而是再函数中屏蔽全局变量(也就是说在这个函数中,全局变量不起作用)。如下图:
1.PNG



二、C99
(1)C99 标准允许在 for 语句的第一个表达式部分声明变量,它的作用范围仅限于复合语句的内部。

(2)允许在程序的任意位置声明变量:允许变量在需要时才声明是一件非常棒的事情,因为如果当你的函数体非常庞大的时候,你总不会愿意往前翻好几个屏幕去看某个变量 i、j、k 是什么意思吧。有些朋友可能会有所担心:“要是到处定义变量,那一不小心重复定义了怎么办?”,其实这是编译器应该关心的问题(编译器会找出重复定义的变量并报错),你放心使用就可以了。

(3)如果一个全局变量在使用之后才被定义
那么你可以在对该全局变量进行访问之前,使用 extern 关键字对该变量名进行修饰。这样就相当于告诉编译器:这个变量我在后边定义了,你先别急着报错。
如下图:加上了 extern int (PS:小甲鱼视频中的演示是只用加上 extern就可以了的,而我的必须要加上类型(int)才能编译成功,不知道为啥
2.PNG

三、注意:不要大量使用全局变量
(1)使用全局变量会使你的程序占用更多的内存,因为全局变量从被定义时候开始,直到程序退出才被释放。

(2)污染命名空间,虽然局部变量会屏蔽全局变量,但这样一来也会降低程序的可读性,人们往往很难一下子判断每个变量的含义和作用范围。

(3)提高了代码的耦合性,牵一发而动全身,时间久了代码长了,你都不知道全局变量被那些函数修改过。






谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
lapo_Mu + 1 + 1 热爱鱼C^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 07:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表