花了两天时间把C FAQ又过了一遍,发现了从前忽略的一些点。
1. 虽然K&R上说结构体必须memcpy或者一个元素一个元素的赋值,其实struct可以直接用=操作符做整体拷贝的;
2. offsetof(),用来计算结构体内成员偏移的宏;
3. 如果函数的返回值为struct,C也会类似C++的在函数形参里加上一个struct *指针的;
4. 可能大家都习惯malloc后做强转了,其实这是含糊的C/CPP编译器混用的恶果。作为C程序,其一void *可以自动转换,其二因为C默认函数返回int,如果malloc没有正确申明,int也会被错误的强转为指针且不报错;
5. sequence point间evaluation的顺序是不保证的;
6. void **是一个很无厘头的东西,void *作为万用指针,void **是什么?指向万用指针的特型指针?
7. 关于申明指针char *p还是char* p的问题,char* p, c这样误导性的代码就是答案。永远写成前者,这不是风格问题;
8. 3["abcde"] 等于 3 + "abcde" 等于"abcde" +3 等于"abcde"[3],华丽的C语言。

