C语言深度剖析--volatile(转载)】的更多相关文章

volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统,硬件或者其他线程等等.遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问.   下面例子: int  i = 10: int  j = i;   // 语句1 int  k = i;   // 语句 2 此时,编译器对代码进行优化,这是因为,在1,2两句中,i没有被用作左值(没有被赋值).这时候编译器认为i的值没有改变,所以在语句…
读书笔记之:C语言深度剖析 <C 语言深度解剖>这本书是一本“解开程序员面试笔试的秘密”的好书.作者陈正冲老师提出“以含金量勇敢挑战国内外同类书籍”,确实,这本书中的知识点都是一些在面试中常见的考点,并且很多都是我们平常不注意的点,对于我们深入理解C语言确实很有帮助. 第1章关键字 1.register虽然寄存器的速度非常快,但是使用register修饰符也有些限制的:register变量必须是能被CPU寄存器所接受的类型.意味着register变量必须是一个单个的值,并且其长度应小于或等于整…
1.数值宏常量     #define宏定义是个演技非常高超的替身演员,但也会耍大牌的,所以我们使用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码都认识宏了:也可以把任何东西都定义成宏.因为编译器会在预编译的时候用真身替换替身,所以在我们的代码里可以常常用替身来帮忙.     #define  PI     3.1415926    在此后的代码中,你尽可能的使用PI来代替3.1415926,而且最好就这么做.不然的话,如果我们精度再提高一点怎么办?如果用PI的话,我们就…
const是constant的缩写,是恒定不变的意思.被const修饰的值,是只读变量. 1.const修饰只读变量,具有不变性      #include <stdio.h> int main()    {      const int Max = 100;      int Array[Max];              return 1;    }     在VC6.0中创建该文件,编译器会报错.因为我们定义数组必须指定其元素的个数,这也从侧面证实C语言中,const修饰的Max仍然是…
关键字: C语言关键字32个: 关键字                                         意 义 auto                           声明自动变量,缺省时编译器一般默认为 auto int                               声明整型变量 double                       声明双精度变量 long                            声明长整型变量 char         …
原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). 比如 char* ptr; ptr指向一个地址,而这个地址理想的情况下存放着一个char型数据,特殊情况下也可能会指向NULL,甚至变成野指针. 数组: 数组代表的是一段连续的内存地址,而并非指针那样代表的只是一个地址. 一般数组会有名字,比如 ] ; 即把一段长度为100个sizeof(char…
本节主要讲C语言中的各种符号,包括注释符.单引号双信号以及逻辑运算符等. 一.注释符 注释符号和注释在程序的预编译期就已经被解决了,在预编译期间,编译器会将注释符号和注释符号之间的部分简单的替换成为空格. 1.在程序中使用注释符号有以下几点需要注意 (1)如果注释符号在数据类型和变量之间,那么将不会影响程序的正常运行. int/*...*/i; (2)如果注释符号位于数据类型之间,那么程序将不会正常运行,因为一个数据类型关键字中间出现一个空格,那么数据类型关键字也就不再是关键字了. /*不能正常…
动态内存分配 为什么使用动态内存分配 例:记录卖出的商品 卖出商品最多只能记录1000个 两种改进的方法 都需要动态内存分配 第二种方法需要重置内存 calloc和realloc realloc重置内存空间 例 小结 malloc(0)申请内存 首先:      在标准的malloc实现中,并不检查输入值的大小,而是将输入值做对齐操作后直接从堆上分配空间.  其次:      不论输入值的大小为多少,在malloc的内部最小的内存分配大小是一个定值(一般是8B),因为malloc需要用这部分空间…
认清函数的真面目 函数的意义 面向过程的程序设计 函数声明和定义 函数参数 编写代码的时候,不要编写类似先后调用的代码 f(k,k++) C语言中的顺序点 a--&&a  ,&&为顺序点,所以a--&&a为0 f(k,k++)的顺序点为进入函数体之前 函数的缺省认定 小结 可变参数列表 如何编写一个可以计算n个数平均值的函数? 用数组 用可变参数列表 可变参数 可变参数的限制 小结 李逵和李鬼(函数和宏) 宏的优点和缺点 函数的优缺点 宏无可替代的优点 小结…
0. static修饰变量和函数 static修饰变量,1)限定作用域,本文件内.全局变量(自定义起,本文件前面要用需extern声明),局部变量函数内:2)生命周期,程序运行期间一直保存. static修饰函数,限定作用域,本文件内.1. enum类型变量大小为4(sizeof),不论enum成员数量.2. enum成员间用","分割,最后一个成员后可不加分隔号. 而struct.union成员间用":"分割,最后一个成员后要加分隔号.而struct的成员初始化用…