register变量_C语言进阶之路:函数—关于变量(auto、static、register、extern等)

1. 局部变量:

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

d59ca4b23eb51f3758725442a38b0259.png

2. 全局变量:

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

7feef8f6ffccecf010ac72a4cb91f327.png

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

526daeed475d0fd0d48e4ea28d004ba5.png

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

dfd6f03c2077b44f3ef10b9e9b96be96.png

3. static 关键字:

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

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

62bd87bb4ead35cf5d1ee00e5b3cdc5e.png

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

b3e913a718154cc500508fcf58e88b2f.png

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

d31d68dd1131e4af9b2634b97a564fca.png

4. 寄存器变量(register):

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

0debe560477ee01fd5ddf60cbb3165de.png

5. extern 关键字:

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

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

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

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

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

5afec227708e5630bb5675175c83abbe.png

6. volatile 关键字:

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

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

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

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

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

263e3684e201bdbfe2074c1d5d0e293d.png

7. restrict 关键字:

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

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

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

C/C++进阶之路​zhuanlan.zhihu.com
3925d230e456223385d4dfdcf718c337.png

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

1c3927f24999416a5a3499b4ba759b81.png
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值