C语言篇之存储类关键字

在此之前需要先明白C语言中的变量和常量都存储在什么地方?
.data段和.bss段:局部变量是存储在栈上的,全局变量存储在.data段和.bss段,其中初始化显示为0的和未赋初值的全局变量存储在.bss段,初始化不为0的存储在.data段,静态局部变量和全局变量的存储类是一样的,其中初始化显示为0的和未赋初值的静态局部变量存储在.bss段,初始化不为0的存储在.data段。
.text段即代码段(在Linux中又叫文本段):程序代码,const修饰的常量也可能存储在.text段(与编译环境有关)。
heap:根据需求判断要不要使用堆,用的时候自己申请,用完之后自己释放。
stack:局部变量存储在栈上,函数调用传参的过程也会用到栈。
1. auto
auto 关键字在C语言中只有一个作用就是修饰局部变量,表示这个变量是自动局部变量,分配在栈上,平时定义的局部变量就是自动局部变量,只是省略了auto。
2. static
static关键字在C语言中有两种用法
第一种就是修饰局部变量:static修饰的局部变量只是改变了存储类,其存储方式和全局变量一样(其中初始化显示为0的和未赋初值的静态局部变量存储在.bss段,初始化不为0的存储在.data段),链接属性为无链接,作用域和普通局部变量一样。
第二种就是修饰全局变量和函数:static修饰全局变量和函数只是改变了他们的链接属性由外链接变为内链接(.C文件内),全局变量和函数默认的链接属性为外链接(可以跨文件进行链接)。
3. register
这个关键字不常用,register修饰的变量,编译器会尽量将他们分配在寄存器中,(平时分配的一般变量都是在内存中,分配在寄存器中一样的用,但是读写效率会提高很多)。所以register修饰的变量用在那种变量被反复高频率的使用,通过改善这个变量的访问效率可以极大的提升程序的运行效率。
4. extern
extern用来声明全局变量,声明的目的主要是在a.c中定义全局变量而在b.c中使用该变量。
5. volatile
volatile 可变的 易变的 C语言中volatile用来修饰一个变量,表明这个变量可以被编译器之外的东西改变(编译器不可预知的东西,比如硬件自动更改了这个变量的值,一般这个变量是一个寄存器的值,比如在多线程中在别的线程更改了这个变量的值),如果不该加时加了会降低效率。
6. restrict
C99编译器中支持,很多延续C89的编译器是不支持restrict关键字的,gcc支持。
restrict只用来修饰指针,不能修饰普通变量,用restrict修饰的指针指向的区域别的指针不能来修改。
7. typedef
typedef属于存储类关键字,但是实际上和存储类没关系。

本博文只是作为自己的一个笔记(本笔记是跟着朱有鹏老师视频课所做的笔记总结),如果能帮助其他人更好,若有疑问欢迎指出,欢迎加QQ 1922546282,共同讨论与学习。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值