[关闭]
@songpfei 2016-02-24T03:40:07.000000Z 字数 889 阅读 1275

《C专家编程》笔记——第一章

程序设计论著笔记


  1. p19:参数传递赋值约束:要使赋值合法,必须满足下列条件之一
    连个操作数都是指向有限定符无限定符相容类型指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符

    • eg1:

      1. char *cp;
      2. const char *ccp;
      3. cpp=cp;//可以正常赋值
      • 左操作数cpp是一个指向有const 限定符的char指针
      • 右操作数cp是一个指向没有限定符的char指针
      • char类型和char类型都是相容的,左操作数所指向的类型具有右操作数所指向的类型的限定符(无),再加上自身的限定符(const).
      • 注意:反过来就不能进行赋值:
        cp=ccp; /*编译错误*/
        const float *不是一个有限定符的指针类型---它的类型是“指向一个具有const限定符的float类型的指针”,也就是说const限定符限定的是修饰指针所指向的类型,而不是指针本身。
    • eg2:
      const char**也是一个没有限定符的指针类型。它的类型是“指向一个具有const限定符的char类型的指针的指针”。
      由于char **const char**都是没有限定符的指针类型,但他们所指向的类型不一样(前者指向 char*,后者指向const char*),因此他们是不相容的。
  2. p24:对无符号类型的建议:
      尽量不要在你的代码中使用无符号类型,以免增加不必要的复杂性。尤其是,不要仅仅因为无符号数不存在(如年龄、国债)而用它来表示数量。
      尽量使用int那样的有符号类型,这样在涉及升级混合类型的复杂细节时,不必担心边界情况(如-1被译为非常大的正数)
      只有在使用位段和二进制掩码时,才可以使用无符号类型。应该在表达式中使用强制类型转换,是操作数均为有符号或无符号数,这样就不必由编译器来选择类型结果。

  3. p25:一个好的宏定义:

  1. #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))//使用该方式,移值方便
  2. \\而不是
  3. #define TOTAL_ELEMENTS (sizeof(array)/sizeof(int))//不便于修改数组基本类型
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注