C语言深度解剖——跟程序员有关

来源:互联网 发布:阿里云产品主要优势 编辑:程序博客网 时间:2024/06/04 19:24

老规矩,先评论再说要点。

这是一部很叼的书,思辨性很强,一般没写过程序的人建议不要看,越看越困。但是对于写了很久但是很少思考的人来说,这是本宝书,好吧,来要点,干货

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知识反应完了,后面还有一些的一些问题,比如浮躁问题,说的有道理,往深里面分析

简历问题:健康可以写一写,不要写身份证号,另外不要写精通,写掌握,奖励写大的,不要事无巨细都往里面写




0 0
原创粉丝点击