《C语言解惑》小笔记

2009/12/31 C/C++

今天花了一下午的时间把这本书看完了,也就150来页,当做是对C的一次复习,当然也发现了以前薄弱的地方。薄薄的一本书,对每一段代码都讲解的很详细,而且针对的都是C程序员较易犯错的地方,用的都是简单的例子,推荐初、中级C程序员好好研读(PS:每一页的插图都还很有意思,都是一些经典的视错觉图像).

  • 在对替换字符串里的宏进行扩展之前,C语言预处理器将先对“#”和“##”操作符进行处理。“##”操作符将合并它的两个操作数。

  • 宏越简单越好。如果无法得到一个简单的宏,就应该把它定义成一个函数。

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
  • 如上,是关于指针操作的,如果能正确理解,对掌握指针的用法很有帮助。

*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指针的指针。

对上面四个式子的分析如下:

  • 先对cpp进行递增,再使用该指针
  • 先对cpp进行递增并通过该指针找到cp[2],然后对cp[2]进行递减并通过该指针找到c[0],最后给c[0]里的地址加上3。
  • 先从cpp开始根据偏移量-2找到cp[0],再沿着该指针找到c[3],最后给c[3]里的地址加上3.
  • 先从cpp开始根据偏移量-1找到cp[1],再从cp[1]开始根据偏移量-1找到c[1],最后给c[1]里的地址加上1.

以上四个式子的结果分别是:POINT ER ST EW

Search

    Table of Contents