鸣对《C专家编程》的笔记(7)

C专家编程
  • 书名: C专家编程
  • 作者: [美] Peter Vander Linde
  • 页数: 291
  • 出版社: 人民邮电出版社
  • 出版年: 2002-12
  • 第20页
    const float *类型并不是一个具有限定符的类型——它的类型是“指向一个具有const限定符的float类型的指针”,也就是说const限定符是修饰指针所指向的类型,而不是指针本身。
    引自第20页

    const char **是没有限定符的指针类型,指针是const char*类型。

    2011-02-18 13:44:57 回应
  • 第21页
    const int limit = 10;
    const int * limitp = &limit;
    int i = 27;
    limitp = &i;

    limitp指向的类型是只读的,但是limitp本身是可变的。

    2011-02-18 13:49:53 回应
  • 第21页
    关键字const并不能把变量变成常量!在一个符号前加上cosnt限定符只是表示这个符号不能被赋值。也就是它的值对于这个符号来说是只读的。
    引自第21页
    2011-02-18 13:55:45 回应
  • 第37页
    static: 在函数内部,表示该变量的值在各个调用间一直保持延续性。 在函数这一级,表示该函数只对文件可见。 注:你可能会奇怪static的意义会相差如此之大,如果你知道原因,也请告诉我一声。(笔记者注:这句比较搞笑。)
    引自第37页
    2011-02-18 13:59:53 回应
  • 第38页

    C语言运算符优先级: 1. .的优先级高于*。->操作符用于消除这个问题。表达式*p.f表示*(p.f)。 2. []高于*。int *ap[]表示ap是个元素为int指针的数组。 3. 函数()高于*。int *fp()表示fp是个函数,返回int*。 4. ==和!=高于位操作符。(val & mask != 0)表示val & (mask != 0)。 5. ==和!=高于赋值符。c = getchar() != EOF表示c = (getchar() != EOF) 6. 算术运算高于移位运算符。msb << 4 + lsb表示msb << (4 + lsb) 7. 逗号运算符优先级最低。i = 1, 2表示(i = 1), 2。(Python中表示i是个元组值为(1, 2))。

    2011-02-18 14:17:53 回应
  • 第57页

    又见const。 const int * grape; int const * grape; 指针所指对象是只读的。 int * const grape; 指针是只读的。 const int * const grape; int const * const grape; 对象和指针都是只读的。

    2011-02-18 14:26:28 回应
  • 第64页

    理解C语言声明的优先级规则: A 声明从它的名字开始读取,然后按照优先级顺序依次读取。 B 优先级从高到低依次是: B 1 声明中被括号括起来的那部分。 B 2 后缀操作符: 括号()表示这是一个函数,而 方括号[]表示这是一个数组。 B 3 前缀操作符:星号*表示“指向…的指针”。 C 如果cosnt和(或)volatile关键字的后面紧跟着类型说明符(如int, long等),那么它作用于类型说明符。在其他情况下,const和(或)volatile关键字作用于它左边紧邻的指针星号。 例子: char * const * (*next)(); 使用规则 解释 ----------- ------------------------------------------------------------------------- A 首先,看变量名“next”,并注意到它直接被括号所括住。 B.1 所以先把括号里的东西作为一个整体,得出“next是一个指向…的指针”。 B 然后考虑括号外面的东西,在星号前缀和括号后缀之间做出选择。 B.2 B.2规则告诉我们优先级较高的是右边的函数括号,所以得出“next是一个函数 指针,指向一个返回…的函数”。 B.3 然后,处理前缀“*”,得出指针所指向的内容。 C 最后,把“char * const”解释为指向字符的常量指针。

    2011-02-18 15:00:02 1人喜欢 回应

鸣的其他笔记  · · · · · ·  ( 全部26条 )