1.Portzebie度量衡系统
关于程序员无法分清万圣节和圣诞节的笑话也依赖于编号系统的内部知识。程序员无法分清万圣节和圣诞节的原因是八进制的31等于十进制的25,也就是说10月30日等于12月25日。
2.根据位模式构筑图图形
图标(icon)或者图形(glyph)是一种小型的位模式映射于屏幕产生的图像。一个位代表图像上的一个像素,如果一个位被设置,那么它代表的像素就是“亮”的,如果一个位被清除,那么它所代表的像素就是“暗”的。
3.在等待时类型发生变化
当操作符的操作数类型不一致时会发生类型转换,这被称为“寻常算法转换”,它负责把两个不同的操作数类型转换成同一种普通类型,转换后的类型一般就是结果类型。这个特性被称为类型提升,当它发生与整型类型时称为“整型提升”。整型提升就是char、short int的位段类型(无论signed或unsigned)以及枚举类型将被提升为int,前提是int能够完整地容纳原先的数据,否则将被转换为unsigned int。
在隐式数据类型转换方面,有三个重要的地方需要注意:(1)隐式类型转换是语言中的一种临时手段,起源于简化最初的编译器的想法;(2)即使不理睬缺省的类型转换,也可以用C语言进行大量的编程工作,许多C程序员就是这么做的;(3)在理解隐式类型转换着档子事之前,不能称自己是专家级C程序员。
4.原型之痛
建立原型就是为了消除一种普通(但很难发现的错误),就是形参和实参之间类型的不匹配。
5.原型在什么地方会失败
(1)K&R C函数声明和K&R C函数定义:能够顺利调用,所传递的参数会进行类型提升;
(2)ANSI C函数声明(原型)和ANSI C函数定义:能够顺利调用,所传递的参数为实际参数;
(3)ANSI C函数声明(原型)和K&R C函数定义:如果使用一个较窄的类型就会失败!函数调用时所传递的实际类型,而函数期望接收的是提升后的类型;
(4)K&R C函数声明(原型)和ANSI C函数定义:如果使用一个较窄的类型就会失败!函数调用时所传递的提升后的类型,而函数期望接收的是实际类型;
6.不需要按回车键就能得到一个字符
#include<stdio.h>
main(){
int c;
//终端驱动处于普通的一次一行模式
system("stty raw");//把I/O设置为raw状态可以实现阻塞式读入
//现在终端驱动处于一次一个字符模式
c=getchar();
system("stty cooked");
//终端驱动又回到一次一行模式
}
7.用C语言实现有限状态机
有限状态机是一种数学概念,有限自动机(FSM)可以用作程序的控制结构。它的基本思路是用一张表保存所有可能的状态,并列出进入每个状态时可能执行的所有动作,其中最后一个动作就是计算下一个应该进入的状态。
8.软件比硬件更困难
散列(Hash)表是一种提高访问表中数据元素的方法,它不是线性地搜索表中的元素,而是一下跳到最相像的元素来存储值。
9.如何进行强制类型转换,为何要进行类型强制转换
用于消除类型歧义。复杂的类型转换可以按照下面3个步骤编写:
(1)一个对象的声明,它的类型就是想要转换的结果类型;
(2)删去标识符(以及任何如extern之类的存储限定符),并把剩余的内容放在一对括号里;
(3)把第二步产生的内容放在需要进行类型转换的对象的左边;