今天花了一下午的时间把这本书看完了,也就150来页,当做是对C的一次复习,当然也发现了以前薄弱的地方。薄薄的一本书,对每一段代码都讲解的很详细,而且针对的都是C程序员较易犯错的地方,用的都是简单的例子,推荐初、中级C程序员好好研读。PS:每一页的插图都还很有意思,都是一些经典的视错觉图像。
1.在对替换字符串里的宏进行扩展之前,C语言预处理器将先对“#”和“##”操作符进行处理。“##”操作符将合并它的两个操作数。
2.宏越简单越好。如果无法得到一个简单的宏,就应该把它定义成一个函数。
char *c[]={"ENTER","NEW","POINT","FIRST"};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
**++cpp
*--*++cpp+3
*cpp[-2]+3
cpp[-1][-1]+1
|
3.如上,是关于指针操作的,如果能正确理解,对掌握指针的用法很有帮助。
*c[]将被求值为一个char,所以c[]会指向一个char数组,而c是一个以char指针为元素的数组.c中的元素被初始化为分别指向char数组"ENTER"、"NEW"、"POINT"和"FIRST"。
**cp[]将被求值为一个char,*cp[]是一个char指针,而cp[]是一个指向一个char指针的指针。cp是一个以char指针为元素的数组。cp的元素被初始化为分别指向c的各个元素。
***cpp将被求值为一个char,**cpp指向一个char,*cpp指向一个char指针,而cpp指向一个char指针的指针。如下图所示。
对上面四个式子的分析如下:
1;先对cpp进行递增,再使用该指针
2;先对cpp进行递增并通过该指针找到cp[2],然后对cp[2]进行递减并通过该指针找到c[0],最后给c[0]里的地址加上3。
3;先从cpp开始根据偏移量-2找到cp[0],再沿着该指针找到c[3],最后给c[3]里的地址加上3.
4;先从cpp开始根据偏移量-1找到cp[1],再从cp[1]开始根据偏移量-1找到c[1],最后给c[1]里的地址加上1.
以上四个式子的结果分别是:POINT ER ST EW
阅读(1891) | 评论(0) | 转发(0) |