c语言中复杂声明的解析

在c语言中声明可以任意复杂,这就导致我们在阅读某些较为复杂的声明时出现问题

解读复杂c声明的一种方法是遵循“声明模仿使用”的阅读方法:

例如:char *(*pfunc)();

*(*pfunc)()是一个 char

(*pfunc)() 是一个 指向char的指针

(*pfunc) 是一个 返回char型指针的函数

pfunc 是一个 指向返回char型指针的函数的指针

另外是一种“从内而外”的解读方法

我们一般采用“左右规则

即:先找到标识符,然后看其右边,“[]”为数组,“()”为函数,接着看左边,有“*”即为指针;如此右左,循环往复。

值得注意的是:[]和()的结合度比*更紧。(就注意下优先级)


例子:char * ( * (a [n] ) () ) () ;

先可以找到标识符a,转向其右边,为数组;

然后其左边,是一个*号,说明是指针数组;

新的一轮循环,右边是(),说明是函数。

那么函数的返回是什么呢,看左边*,是指针;

那么指针指向的是什么呢,看右边,是一(),是函数;

那么函数的返回值呢,指向左侧的char*,即:指向字符指针的函数


综上所述,例子定义的是:

一个包含n个指向返回指向字符指针的函数指针数组。


一般我们会用typedef逐步完成声明

比如上例的形式如下:


typedef char *pc;

typedef pc fpc();

typedef fpc *pfpc;

typedef pfpc fpfpc();

typedef fpfpc *pfpfpc;

pfpfpc a[N];



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值