1. 局部变量:
局部变量也叫自动变量, 它声明在函数开始, 生存于栈, 它的生命随着函数返回而结束.
2. 全局变量:
全局变量声明在函数体外, 一般应在函数前; 每个函数都可以使用它, 不过全局变量应尽量少用.
全局变量会被初始化为空, 而局部变量在没有赋值前是一个垃圾值:
当全局变量与局部变量重名时, 使用的是局部变量:
3. static 关键字:
用 static 关键字修饰的局部变量是静态局部变量;
静态局部变量存值如同全局变量, 区别在于它只属于拥有它的函数; 它也会被初始化为空.
用 static 关键字修饰的全局变量是静态全局变量; 静态全局变量只能用于定义它的单元。
用静态变量记录函数被调用的次数:
4. 寄存器变量(register):
书上说寄存器变量会尽量把变量放到寄存器(而不是栈或堆), 从而加快存取速度, 我试了一下, 效果一般般.
5. extern 关键字:
使用外部全局变量应该用 extern 重新声明一下;
如果不使用 extern, 将是重新定义;
在链接阶段, 同一程序中不同单元的全局变量是共用的所以不能重新定义;
本例为了省事并没有涉及另一个文件, 只是把变量放在文件尾模拟了一下.
另外, extern 主要还是用于函数.
6. volatile 关键字:
程序在使用变量时, 特别是连续多次使用变量时, 一般是载入寄存器, 直接从寄存器存取, 之后再还回内存;
但如果此变量在返回内存时, 假如内存中的值已经改变了(从外部修改了)怎么办?
为了避免这种情况的发生, 可以用 volatile 说明此变量, 以保证变量的每次使用都是直接从内存存取.
但这样肯定会影响效率, 幸好它并不常用.
另外: 如果 const volatile 同时使用, 这表示此变量只接受外部的修改.
7. restrict 关键字:
restrict 有点和 volatile 相反; 不过 restrict 只是对指针.
“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C语言、C++,自己有做的材料的整合,一个完整的学习C语言、C++的路线,学习材料和工具。全球最大的C/C++、编程爱好者的聚集地就在我这里<进我的专栏就能看到>!欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以跟我一起学习!”
关注我和我的专栏,带你遨游代码世界!
程序猿zhuanlan.zhihu.com最后分享一张C/C++学习路线图给爱学习的小伙伴