c语言的声明的理解方式
以下内容取自c专家编程,基本上按照以下规则,可以方便的理解出c的声明,typedef的语法是类似的。
**********************************************************************
理解C语言声明的优先级规则
A. 声明从它的名字开始读取,然后按照优先级顺序依次读取。
B. 优先级从高到低依次是:
B.1 声明中被括号括起来的那部分
B.2 后缀操作符:
括号 ()表示这是一个函数,而方括号【】表示这是一个数组。
B.3 前缀操作符:星号*表示“指向...的指针”。
C. 如果const和(或)volatile关键字的后面紧跟类型说明符(如int,long等),那么它作用于类型说明符。在其他情况下,const和(或)volatile关键字作用于它在左边紧邻的指针星号。
例1:char * const * (*next)();
1.找到变量名 next。
2.右边没有()和【】后缀,则往左看有个*前缀,可以得到“next是一个指向...的指针”
3.*next是被括号括起来的一个整体,再往右看是()后缀,表明是一个函数,则“next是一个指向函数的指针”
4.往左看是个星号前缀,表明“next是一个指向返回值是指针的函数的指针”,即“next是一个指向函数的指针,函数的返回值是指针”
5.剩下的都在左边,const修饰左边的*,表明是一个不可变得指针,其类型为char。
6.连起来则是,“next是一个指向函数的指针,该函数返回值是一个指向不可变得char型指针的指针”。
例2:int(*fun())()
1.变量名是fun。
2.后缀为(),“fun是一个函数。”
3.前缀为*,“fun是一个函数,其返回值是一个指针”
4.后缀为(),“fun是一个函数,其返回值是一个指针,指针指向一个函数”
5,前缀是int类型说明符,“fun是一个函数,其返回值是一个指针,指针指向一个函数,返回值为int类型”
int foo(void) { return 1; } int(*foo1())() { return foo; //foo1是一个函数 ,其返回值为指向另一个函数的指针 } void main() { int a = 0; a = (*foo1())(); }

浙公网安备 33010602011771号