C语言中的怪异声明

去面试的时候,总是问到C语言中的怪异声明,比如指向函数的指针,指向数组的指针,指向返回类是函数指针的函数的函数指针数组,。。。。。。。反正一大堆有的你搞头了。
比如:
1,    int (*p)[10];
2,   int(*p)(int);
3,   char* const *( * next ) ( );
4,   void ( *signal( int sig, void(*func)(int) ) )(int);
5,   int ( *a[] ) (int);
6,   int ( *p() ) [10];
这种声明的解读规律如下:
a,找到变量名,这个应该很容易的。
b,先看变量名的 右边
        b1,如果是个(),表示这个变量是个函数声明。
        b2,如果是个  []   ,表示这个变量是个数组声明。
        b3,如果什么都没有,啥也不表示了
c, 再看变量名的 左边,如果有*,表示  指向....的指针,
       c1,如果右边什么也没有,变量名本身是一个指针。
       c2,如果右边是 [],表示数组的内容是指针。
       c3,如果右边是(),表示函数的返回值是个指针。
我们现在来分析下:
1,    int (*p)[10];
   分析:变量名是p,p的右边没有任何东西,p的左边是一个*,表示p本身是一个指针。括弧外面修饰的是p指向的内容,修饰模式是 int XXX[10],是一个包含10个元素的数组。连起来就是,p是一个指针,指向一个数组,这个数组包含10个元素
2,   int(*p)(int);
    分析:同样,变量名是p,p右边什么都没有,左边是一个*,表示p本身就是一个指针。括弧外面修饰的是p指向的内容,修饰模式为   int   XXX(int ),这表示一个函数名是XXX的函数。连起来就是,p是一个指针,指向一个函数,这个函数的参数是int型,返回值也是int型。
3,   char* const *( * next ) ( );
     分析:
4,   void ( *signal( int sig, void(*func)(int) ) )(int);
     分析:
5,   int ( *a[] ) (int);
     分析:
6,   int ( *p() ) [10];
     分析:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值