老规矩,先评论再说要点。
这是一部很叼的书,思辨性很强,一般没写过程序的人建议不要看,越看越困。但是对于写了很久但是很少思考的人来说,这是本宝书,好吧,来要点,干货
1、书中的推荐书《The Programming language 》、《Expert C Programming》、《Write Clean Code》、《高质量程序设计指南——C++/C语言》
2、静态全局变量,作用仅限于变量定义的文件,其他文件即使用extern声明也没法使用它
3、Float变量与零值进行比较,float的精度为EPSINON=0.000001(6到7位有效数字)
float:
1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:
1bit(符号位) 11bits(指数位) 52bits(尾数位)
4、指针类型变化,必须要强制类型转换
5、+0和-0在计算机存储,正负0的存储都是补码法,存储都是求反后加1,都还是0
6、要求代码文档化,自己能注释自己,解决注释更新又要重新写的问题
7、const只读变量,const int Max=100;int Array[Max];
8、union成员变量共用空间,都是从低地址开始,测大端及小端
int checkSystem()
{
union check()
{
int i;
char ch;
} c;
c.i=1;
return (c.ch==1);
}
9、typedef int int32
unsigned int32 j=10;
typedef取的别名不支持这种类型扩展
10、0x01<<2+3,+号比<<优先级高
11、++i+++i+++i,贪心算法,从左到右读入字符,每个符号应该包含尽可能多的字符
12、2/(-2),2%(-2)先得-1及0,再得1和1
13、容易出错的优先级问题
1)*p.f是*(p.f)
2)int *ap[]=int *(ap[])
3) c=getchar()!=EOF c=(getchar() != EOF)
4)逗号运算符在所有运算符中优先级最低,i=1,2,i=(1,2)
14、#define宏定义,undef撤销已定义过的宏名,#ifdef如果有定义,#ifndef如果无定义,#error遇到error就会生成一个编译错误提示消息,并停止编译
15、C中const不能作为数组的维数定义,但是C++不同
16、最小定义,#define min(a,b) {_exptension_ (Typeof)(a) _a=(a),(Typeof)(b) _b=(b)), _a>_b?_b:_a;}
17、#pragma comment(lib,"user32.lib")
18 、内存对齐问题,到底怎么对齐,什么时候对齐的问题:往后面一个对齐,后面大就对
19、向NUL都ASCII码表的第1个字符,表示的都是空字符
20、指针数组和数组指针的内存布局:int *p1[10]; int (*p2)[10];第一个是指针数据,第二个是数组指针
21、&a+1是加一个数组的地址,&a[0]+1=a[1],a+1=a的数组+1
22、
函数指针数组 char *(* pf[3])(char *p)
函数指针数组指针char *(*(*pf)[3])(char *p);
(*(void(*)())0),开始分析,*(void(*)()是函数指针,0是具体地址,再加个*号
23、结构体成员指针未初始化
24、没有为结构体指针分配足够的内存
25、会出现为0出现:申请0字节内存,内存不足也可能会有这种情况,需要检查是否分配成功
26、多次free的NULL地址,是可以滴,free多次其他地方也会出错
27、尽量避免函数带有记忆功能
28、sizeof(a)=10;sizeof(&a)=4
29、unsigned +int =unsigned
30、x86系统是小端,小端是正常的,低位存地址,高位存高地址
31、getchar输出为int
C知识反应完了,后面还有一些的一些问题,比如浮躁问题,说的有道理,往深里面分析
简历问题:健康可以写一写,不要写身份证号,另外不要写精通,写掌握,奖励写大的,不要事无巨细都往里面写