数据转型
浮点数转换为整数(int )和(int&)形式:
(int)a把浮点数a的数学数值转化成int型,保留了其整数部分。(int&)a等价于*((int*)&a),即将浮点数a的内存存储结构按照int型来解释,浮点数在存储的时候需要包括符号部分、指数部分、位数部分。而浮点数0的内存存储结构是全为0,两者得到的结果一样。
数据类型转换包含两种情况,一种是程序员进行控制的类型转换(强制类型转换),另一种是编译器进行的转换(隐式类型转换)。
数据指针
*p++是先取出*p的值,然后让p++;(*p)++是先取出*p的值,让这个值++;*(P++)是先取出*p的值,让p++;所以,*p++等价于*(P++)。
函数指针的声明: int (*pf)(int,int);
(*pf)(5, 8);//调用
C语言提供的一种简写方式:
int fun(int,int);
pf = fun;
pf(5, 8); //调用
数组指针(pointer to array)的声明:
int a[5];
int (*pa)[5];
pa = &a;
int i = (*pa)[2]; // 将a[2]赋值给i;
typedef
并不创建新的类型。它仅仅为现有类型创建一个新的名字,易于记忆和使用。typedef 行为有点像 #define 宏,用其实际类型替代同义字。不同点是typedef在编译时被解释,因此能让编译器处理文本替换(预处理无法实现)。typedef就像auto、extern、mutable、static和register一样是一个存储类关键字。但它只是在语句构成上,typedef声明看起来象static,extern等类型的变量声明。
typedef register int FAST_COUNTER; // 错误编译通不过
不能在声明中用多个存储类关键字修饰。typedef 的一个重要的用途就是快速定义机器无关的类型,能隐藏复杂和难以理解的语法。方便移植。