一、类型提升
1、整型提升
1)、规则:抽象计算机把每个变量的值提升为int的长度,然后对两个int值进行运算,然后再对结果进行裁剪。(P173 表8-1)
2、浮点型提升
1)、规则:抽象计算机把每个变量的值提升为double的长度,然后对两个double值进行运算,然后再对结果进行裁剪。(P173 表8-1)
3、数组提升(P173 表8-1)
注意:函数的参数也会被提升。
二、原型
1、K&R C和ANSI C原型对比(P175 表8-2)
2、原型在什么地方会失败?
1)、K&R C函数声明和K&R C函数定义(能够顺利调用,所传递的参数会进行类型提升)。
2)、ANSI C函数声明(原型)和ANSI C函数定义(能够顺利调用,所传递的参数为实际参数)。
3)、ANSI C函数声明(原型)和K&R C函数定义(如果使用一个较窄的类型就会失败!函数调用时所传递的是实际类型,而函数期望接收的是提升后的类型)。
4)、K&R C函数声明和ANSI C函数定义(如果使用一个较窄的类型就会失败!函数调用时所传递的是提升后的类型,而函数期望接收的是实际类型)。
注意:不要在函数声明和定义中混用新旧两种风格!
三、强制转换
1、如何进行强制转换?
1)、方法
A、简单的类型转换:在括号里写上新类型的名称,然后把它放在需要转换类型的表达式之前。
B、复杂的类型转换
I、一个对象的声明,它的类型就是想要转换的结果类型。
II、删去标识符(以及任何如extern之类的存储限定符),并把剩余的内容放在一堆括号里。
III、把第II步产生的内容放在需要进行类型转换的对象的左边。
2、进行强制转换的目的?
1)、类型转换。
2)、消除类型歧义。
四、编程技巧
1、不需要按回车键就能得到一个字符的方法
1)、kbhit函数——如果一个字符正在等待被都读取,它就会发出提示。
2)、Micorsoft和Borland的C编译器提供了getch()(或者getche(),它可以在字符被读取的同时显示与屏幕上)来获取单个字符,而不用等待整行结束。
3)、UNIX系统中可以用stty程序实现。
4)、把I/O设置为raw状态可以实现堵塞式读入——如果终端没有字符输入,进程就一直等待,知道有字符输入为止。如果需要阻塞式读入,可以使用ioctl()系统调用。
注:轮询与非轮询读取方式的概念。使用errno确认调用库函数或调用系统师傅遇到了问题。
2、散列表