在C专家编程64页,存在着一个名词的错误,指针常量,和常量指针。内容大致讲解C语言声明中一些比较复杂的问题,具体例子如下:
char * const * (*next) ();
1 2 3 4 5 6
这个声明语句有一点复杂,首先我们要明确的一些知识点:1、const在没有括号的情况下,是优先于左边的*相结合的,所以这个声明语句我们可以分析如下:
(*next) 说明next是一个指针;
() 说明这是一个指向函数的指针,该类型的函数不带参数;
char * const * 说明了返回值的类型;
接下来我们分析返回值的类型:首先const与左边的*结合,我们可以由此认为该返回值是一个指针类型,这个指针所指向的数据类型是一个常量,这个常量的类型是 指向char类型的指针 的类型。而书里面所说,书中原文这样描述返回值: 该函数返回另一个指针,该指针指向一个类型为char的常量指针。本人认为这里应该存在错误,应该是指针常量。
故此写下作了个测试:
char * const * a,
b;
char * const * ptr = &b;
*ptr = a; //这里会报错,说ptr指向的是read-only的内存。因此本人认为此处乃是常量。