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())();
}

 

posted @ 2017-03-26 22:59  九杯水  阅读(254)  评论(0)    收藏  举报