《C专家编程》笔记第三章--分析C语言的声明

413 阅读2分钟

笔记

P57

  • const的使用:
     首先要搞清楚一点,const表示修饰的变量不能被赋值而不是常数,类似于只读。如果搞懂了下面几个例子,那你就基本上掌握了对const的使用。
    const int * const grape; //grape是只读,grape所指的对象也是只读的
    int const * const grape; //同上
    // next是一个函数指针,指向的函数返回一个指向char类型的常量指针的指针
    char * const *(*next)();  

上面最后一句的声明的关键在于对char * const *的理解,也就是函数返回的类型,首先char**表示一个指向char型的二级指针,再来理解char** const,表示一个指向char型的二级指针,该指针是个常量类型,若果我们把const前移,就变成题目所述的char * const *,那这就表示“这是一个指针,该指针指向另一个指向char型的常量指针”。

P66

这一小节讲述了通过图表法来分析复杂的C语言声明,但是我认为,理解图表法里的规则不如直接从分析一个个声明开始,多练几次,对C语言的声明就有了深刻的了解。
例: char *(* c[10])(int **p)
分析:先从整体上我们可以把声明分成三个部分char*、(* c[10])、(int **p),从左到右依次代表的是返回类型,函数名,形参。从右往左分析,(int **p)表示“该函数有一个形参,该形参类型是一个指向int类型的二级指针”,再来看中间部分(* c[10])表示“c是一个有10个元素的数组,数组元素是一个指针,该指针指向一个函数”,最后看char* 表示该函数返回一个指向char的指针。
综上所述,该声明表示“c是一个包含是个元素的数组,元素类型是一个函数指针,指向一个返回char类型指针的函数,该函数有一个形参,该形参类型是一个指向int型的二级指针”。