Chinaunix首页 | 论坛 | 博客
  • 博客访问: 76310
  • 博文数量: 8
  • 博客积分: 450
  • 博客等级: 一等列兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-16 16:14
文章分类

全部博文(8)

文章存档

2010年(6)

2009年(2)

分类: C/C++

2009-12-31 20:53:56


   今天花了一下午的时间把这本书看完了,也就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

阅读(1851) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:openSuSE设置VMWARE的网络连接

给主人留下些什么吧!~~