C语言的存储类别

C语言的存储类别

在这里插入图片描述

关键字

auto、extern、static、register、_Thread_local (C11)

一般注解

变量的存储类别取决于它的作用域、链接和存储器。存储类别由声明变量的位置和与之关联的关键字决定。定义在所有函数外部的便来那个具有文件作用域、外部链接、静态存储器。声明在函数中的变量是自动变量,付费该变量前面使用了其他关键字。它们具有块作用域、无链接、自动存储期。以static关键字声明在函数中的变量具有块作用域、无链接、静态存储期。以static关键字声明在函数外部的变量具有文件作用域、内部链接、静态存储期。

C11新增了一个存储说明符:_Thread_local。以该关键字声明的对象具有线程存储期,意思是在线程中声明的对象在该线程运行期间一直存在,且在线程开始时被初始化。因此,这种对象属于线程私有。

属性

下面表格总结了这些存储类别的属性:

存储类别存储期作用域链接如何声明
自动自动在块中
寄存器自动在块中,用关键字register
静态、外部链接静态文件外部在所有函数外部
静态、内部链接静态文件内部在所有函数外部,使用关键字static
静态、无链接静态在块中,使用关键字static
线程、外部链接线程文件外部在所有块外部,使用关键字_Thread_local
线程、内部链接线程文件内部在所有块的外部,使用关键字static和_Thread_local
线程、无链接线程在快中,使用关键字static和_Thread_local

注意,关键字extern只能用来再次声明在别处已定义过的变量。在函数外部定义变量,该变量具有外部链接属性。

出了以上介绍的存储类别,C语言还提供了动态分配内存。这种内存通过调用malloc()函数系列中的一个函数来分配。这种函数返回一个用于访问内存的指针。调用free()函数或者结束程序可以释放动态分配的内存。任何可以访问指向该内存指针的函数均可以访问这块内存。例如,一个函数可以 把这个指针的值返回给另一个函数,那么另一个函数也可以访问该指针指向的内存。


参考资料:

史蒂芬・普拉达. C Primer Plus (第6版) 中文版[M]. 人民邮电出版社, 2016.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy_Robot

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值