C语言细节笔记
FZK374470412
这个作者很懒,什么都没留下…
展开
-
C中的const
1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)2、为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。3、cons有什么主要的作用? (1)可以定义const常量,具有不可变性。 例如:const int转载 2013-06-25 23:07:58 · 669 阅读 · 0 评论 -
C语言中的volatile
推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释简直有点误导人;下面的函数被用来计算某个整数的平方,它能实现预期设计目标吗?如果不能,试回答存在什转载 2013-06-26 15:29:55 · 653 阅读 · 0 评论 -
预处理器标识#error的目的是什么?
由于是第一次用博客,先试一试.....................回到原问题 预处理器标识#error的目的是什么?编译程序时,只要遇到 #error 就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。下面举个例子:程序中往往有很多的预处理指令#ifdef XXX.........#else...原创 2013-06-24 21:13:23 · 2676 阅读 · 0 评论 -
C语言中的typedef
Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。#define dPS struct s *typedef struct s * tPS;以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?答案是:typedef更好dPS p1,p2;tPS p3,p4;第一个扩展为转载 2013-06-26 16:07:15 · 1104 阅读 · 0 评论 -
定义与声明的区别
所谓的定义是指编译器创建了一个对象并为这个对象开辟一块内存,是从无到有的过程,而声明只是告诉编译器有这个东西存在了,这个变量名或者函数名已经被预定了,举个例子 : 1.void test(int a) { ............. ................ } 2. void test(int);第一原创 2013-06-28 19:36:52 · 639 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元转载 2013-06-28 09:55:48 · 725 阅读 · 0 评论 -
与零值比较
当通过用if(值 0)进行比较的时候 ,要看这个值是什么类型的 具体如下:1. 当值为 int, char型的时候 应用 if(int_val == 0)或者 if(int_val != 0) 2. 当值为指针变量的时候 应用if(NULL == p)或者if(NULL != p) 注:NULL最好写在左边 因为如果在右边的话容易写成 p=NULL 编译不会错 但在原创 2013-06-28 21:20:05 · 739 阅读 · 0 评论 -
结构体的内存对齐
结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项。结构体内部成员的对齐要求,结构体本身的对齐要求。最重要的有三点(一)成员对齐。对于结构体内部成员,通常会有这样的规定:各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。但是也可以看到,有时候某些字段如果严格按照大小紧密排列,根本无法达到这样的目的,因此有时候必须进行padding。各成员转载 2013-06-30 17:41:53 · 681 阅读 · 0 评论 -
关于printf()参数问题
原创 2014-03-07 13:12:18 · 1751 阅读 · 0 评论