C语言声明的优先级规则--如何看懂复杂的声明语句 - graybull's Blog
C语言声明的优先级规则--如何看懂复杂的声明语句
- C语言声明的优先级规则
- 解读一个复杂例子char* const *(*next)();
- 使用typedef
C语言复杂的声明语句,总是让人很头痛。这里,我摘录了《C专家编程》的一段内容,来简要地阐述以下如何看懂这些复杂的东东。
举例:char * const * (*next) (); //请问这是神马意思?
如果你对此还有疑问,请看下文。
C语言声明的优先级规则
A 声明从它的名字开始读取,然后按照优先级顺序依次读取;
B 优先级从高到低依次是:
B.1 声明中被括号括起来的那部分;
B.2 后缀操作符:
括号()表示这是一个函数,而
放括号[]表示这是一个数组;
B.3 前缀操作符:星号*表示这是一个“指向...的指针”;
C 如果const和(或)volatile关键字的后面紧跟类型说明符(如int,long等),那么它作用于类型说明符。在其他情况下,它作用于关键字左边紧邻的指针星号。
按照规则解读 char * const * (*next) ();
首先,(*next) 表示next是一个指针,它指向某个东西;
根据B.2和最右边的括号,next指向一个函数,即它是一个函数指针;
根据B.3,第二个星号表示,该函数返回一个指针;
char * const是函数返回的指针所指向的类型;
char* 是字符指针;
const修饰第左边的星号,即字符指针是常量的,该指针不可修改(该指针指向的字符内容是可修改的);
综合地表述为,next是一个指针,它指向一个函数,该函数返回一个指针,该指针指向一个类型为char的常量指针。
使用typedef
typedef可以为一个类型起一个别名。使用typedef可以简化以上声明哦,让我们来看看。
typedef char* ptrchar;
typedef const ptrchar * ptrReturn;
typedef ptrReturn (* ptrfunc) ();
那么next可被声明为:ptrfunc next;
等价于char * const * (*next) ();
2013年3月04日 23:57
cdecl> explain char * const * (*next) ();
declare next as pointer to function returning pointer to const pointer to char
2013年3月05日 16:38
@依云: 好东东
2024年2月22日 00:44
Thanks for posting this info. I just want to let you know that I just check out your site and I find it very interesting and informative. I can't wait to read lots of your post