文档章节

C Primer Plus 第12章 12.9 总结

idreamo
 idreamo
发布于 2016/12/28 06:18
字数 1056
阅读 46
收藏 0

用于存储程序数据的内存可用存储时期、作用域和链接来表征。存储时期可以是静态的、自动的或者分配的。如果是静态的,内存在程序开始执行时被分配,并在程序运行时一直存在。如果是自动的,变量所用的内存在程序执行到该 变量定义所在的代码块时开始分配 ,在退出代码块时释放。如果是分配 的内存,内存通过调用malloc()分配,通过调用函数free()释放。

作用域决定了哪一部分程序可以访问某个数据。在所有函数之外定义的变量具有文件作用域,并对该变量声明之后定义的全部函数可见。在代码块内定义或者作为函数参量定义的变量具有代码块作用域,并只在该代码块及其子代码块中可见。

链接描述了程序的某个单元定义的变量可被链接到其他哪些地方。具有代码块作用域的变量作为局部变量,具有空链接。具有文件作用域的变量可有内部链接或外部链接。内部链接意味着变量只可在包含变量定义的文件内部使用。外部链接意味着变量也可以在其他文件中使用。

下面是C的一种存储类:

C的5种存储类
自动 在一个代码块内(或一个函数头部作为参量)声明的变量,无论有没有存储类修饰符auto,都属于自动存储类。该类具有自动存储时期、代码块作用域和空链接。如未经初始化,它的值是不定的。
寄存器 在一个代码块内(或一个函数头部作为参量)使用存储类修饰符register声明的变量属于寄存器存储类。该 类具有自动存储时期、代码块作用域和空链接,并且您无法获得其地址。把一个变量声明为寄存器变量可以指示编译器提供可用的最快访问。如未经初始化,它的值是不定的。
静态、空链接   在一个代码块内使用存储类修饰符static声明的变量属于静态空链接存储类。该 类具有静态存储时期、代码块作用域和空链接,仅在编译时初始化一次。如果未经初始化,它的字节都设定为0.
静态、外部链接 在所有函数外部定义、未使用存储类修饰符static的变量属于静态、外部链接存储类。该类具有静态存储时期、文件作用域和外部链接,仅在编译时初始化一次。如未经初始化,它的字节都被设为0。
静态、内部链接 在所有函数外部定义、使用存储类修饰符static的变量属于静态、内部链接存储类。该 类具有静态存储时期、文件作用域和内部链接,仅在编译时初始化一次。如果明确初始化,它的字节都被设定为0。

分配内存是使用函数malloc()提供的内存,该函数返回一个指向具有所请求字节数的内存块的指针。将这一内存块的地址作为参数来调用free(),可以使该内存块重新可用。

类型限定词说明符有const、volatile和restrict。说明符const将数据限定为不变的。在使用指针时,const可以表明指针本身不变或指针指向的数据不变,这取决于const在声明 中的位置。说明符volatile表明数据除了可被程序修改外还可以通过其他方式修改,其目的是警示编译器在优化时不要做出相反的假定。说明符restrict也是为了优化而设置。由restrict限定的指针被认为是提供了对其所指向的数据块的惟一访问途径。

 

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第12章 12.4 随机数函数和静态变量

首先,来看一个随机数函数,该函数使用了一个具有内部链接的静态变量。ANSI C程序库提供了rand()函数来产生随机数。有多种随机数的算法,ANSI C 标准允许C实现使用针对特定机器的最佳算法。不...

idreamo
2016/11/24
32
0
【C++】第12章 类和动态内存分配 知识点总结

《C++ Primer Plus》第12章知识点总结 在构造函数中使用new时应注意的事项 (1)如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete (2)new和delete必须互相兼容。new...

qq_37792173
2017/11/27
0
0
书单及进度(每日更新2015-7-13)

jQuery Mobile Web Development Essentials.pdf 写的很好5 Apache Cordova 3 Programming.pdf 写的比较啰嗦,不过找不到其它的书了3 Web Development with Node and Express.pdf ING(这个已经......

cyper
2014/05/14
231
7
新书《深入理解Kafka:核心设计与实践原理》上架,感谢支持~

版权声明:本文为博主原创文章,未经博主朱小厮允许不得转载。 https://blog.csdn.net/u013256816/article/details/87898176 新书上架 初识 Kafka 时,笔者接触的还是 0.8.1 版本,Kafka 发展...

朱小厮
02/23
0
0
C Primer Plus(5版)第8章编程题1_重定向实现

小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo或者扫描我的头像,验证时请注明是“知友” 一、题目描述 本题是第8章编程题的第一道题,题目如下: 二、题目及思路分析 从题述来看...

石家的鱼
2017/07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
2
0
微服务架构依赖图

基于spring-cloud-alibaba + dubbo

龙影
昨天
5
0
Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部