c 函数多次声明_C语言进阶之路:函数—变量(auto、static、register、extern等)

ecd012308ed9506882290cfa6b1c7a01.png

1. 局部变量:

局部变量也叫自动变量, 它声明在函数开始, 生存于栈, 它的生命随着函数返回而结束.

fd0fbf69f2a8478e370acdf1aadbb64a.png

2. 全局变量:

全局变量声明在函数体外, 一般应在函数前; 每个函数都可以使用它, 不过全局变量应尽量少用.

5db7d8484ba9d1819dd1960674b74612.png

全局变量会被初始化为空, 而局部变量在没有赋值前是一个垃圾值:

4b1e44795bb8ae8282e23b71308a531e.png

当全局变量与局部变量重名时, 使用的是局部变量:

392d34100d1018107029ec7f9d625a60.png

3. static 关键字:

用 static 关键字修饰的局部变量是静态局部变量;

静态局部变量存值如同全局变量, 区别在于它只属于拥有它的函数; 它也会被初始化为空.

3d32ba21506ffa2ff13eacea35059e97.png

用 static 关键字修饰的全局变量是静态全局变量; 静态全局变量只能用于定义它的单元。

72986a2bd9788ce523aa81f5e09a7a87.png

用静态变量记录函数被调用的次数:

9b2f9efbbe16973b87483eb767af6622.png

4. 寄存器变量(register):

书上说寄存器变量会尽量把变量放到寄存器(而不是栈或堆), 从而加快存取速度, 我试了一下, 效果一般般.

75ab6800e7b561c8aac002a917de0fe1.png

5. extern 关键字:

使用外部全局变量应该用 extern 重新声明一下;

如果不使用 extern, 将是重新定义;

在链接阶段, 同一程序中不同单元的全局变量是共用的所以不能重新定义;

本例为了省事并没有涉及另一个文件, 只是把变量放在文件尾模拟了一下.

另外, extern 主要还是用于函数.

6f35b58fcfcd805c51a43aa75945bfb6.png

6. volatile 关键字:

程序在使用变量时, 特别是连续多次使用变量时, 一般是载入寄存器, 直接从寄存器存取, 之后再还回内存;

但如果此变量在返回内存时, 假如内存中的值已经改变了(从外部修改了)怎么办?

为了避免这种情况的发生, 可以用 volatile 说明此变量, 以保证变量的每次使用都是直接从内存存取.

但这样肯定会影响效率, 幸好它并不常用.

另外: 如果 const volatile 同时使用, 这表示此变量只接受外部的修改.

862769582179fe2aef4440eb8d53fdba.png

7. restrict 关键字:

restrict 有点和 volatile 相反; 不过 restrict 只是对指针.

“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。全球最大的C/C++、编程爱好者的聚集地就在我这里<进我的专栏就能看到>!欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以跟我一起学习!”

关注我和我的专栏,带你遨游代码世界!

程序猿​zhuanlan.zhihu.com
8ad693d4351fffec0cb40de69d626bf0.png

最后分享一张C/C++学习路线图给爱学习的小伙伴

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值