2013年11月8日
摘要: int *p = NULL 和 *p = NULL int *p = NULL; 这时候我们用编译器查看p的值为0x00000000.这句话的意思是定义一个指针变量p,其指向内存里面保存的是int类型的数据,在定义变量p的同时,把p中保存的内存的值设为0x00000000。这个过程叫做初始化。 int *p; *p = NULL; 第一行代码定义了一个指针变量p,其指向的内存里面保存的是int类型的数据;但是这时候变量p本身的值是多少则不得而知,也就是说现在变量p保存的可能是一个非法的地址。第二行代码给*p 赋值为NULL,即给p指向的内存赋值为NULL(访问p指向的内存);但是由于... 阅读全文
posted @ 2013-11-08 17:31 crims 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 1.数值宏常量 #define宏定义是个演技非常高超的替身演员,但也会耍大牌的,所以我们使用它要慎之又慎。它可以出现在代码的任何地方,从本行宏定义开始,以后的代码都认识宏了;也可以把任何东西都定义成宏。因为编译器会在预编译的时候用真身替换替身,所以在我们的代码里可以常常用替身来帮忙。 #define PI 3.1415926 在此后的代码中,你尽可能的使用PI来代替3.1415926,而且最好就这么做。不然的话,如果我们精度再提高一点怎么办?如果用PI的话,我们就只需要修改一次。这种情况不是最要命的,我们看下面情况: #define ERROR_POWEROFF -1 如果你的代码里... 阅读全文
posted @ 2013-11-08 17:21 crims 阅读(333) 评论(0) 推荐(0) 编辑
摘要: union维护足够的空间来放置多个数据成员中的“一种”,而不是为每一个数据成员配置空间。在union中,所有的数据成员共用一个空间,同一时间只能存储其中一个数据成员,所有的数据成员具有相同的起始地址。 阅读全文
posted @ 2013-11-08 17:11 crims 阅读(190) 评论(0) 推荐(0) 编辑
摘要: volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统,硬件或者其他线程等等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 下面例子: int i = 10; int j = i; // 语句1 int k = i; // 语句 2 此时,编译器对代码进行优化,这是因为,在1,2两句中,i没有被用作左值(没有被赋值)。这时候编译器认为i的值没有改变,所以在语句1时,从内存取出i的值付给j之后,这个值并没有被丢掉,而是在2语句中继续使用这个值给k赋值。编译器不会生成... 阅读全文
posted @ 2013-11-08 17:09 crims 阅读(183) 评论(0) 推荐(0) 编辑
摘要: const是constant的缩写,是恒定不变的意思。被const修饰的值,是只读变量。1、const修饰只读变量,具有不变性 #include int main() { const int Max = 100; int Array[Max]; return 1; } 在VC6.0中创建该文件,编译器会报错。因为我们定义数组必须指定其元素的个数,这也从侧面证实C语言中,const修饰的Max仍然是一个变量,只不过是只读属性罢了。 const修饰的只读变量必须在定义的同时初始化。2、节省空间,避免不必要的内存分配,同时提高效率 const推出的初始目的,是为了取代预编... 阅读全文
posted @ 2013-11-08 16:56 crims 阅读(222) 评论(0) 推荐(0) 编辑