复杂指针声明

右左法则

这是一个简单的法则,但能让你准确理解所有的声明。这个法则运用如下:从最内部的额括号开始阅读声明,向右看,然后向左看。当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都被声明完毕。
对上述右左法则做一个小小的修正:当你在第一次开始阅读声明时,必须从变量名开始,而不是从最内部的括号。下面结合例子来演示一下右左法则的使用。

int *(*(*fp1) (int) ) [10];

阅读步骤:

  • 从变量名开始——fp1。
  • 往右看,什么也没有,碰到了),因此往左看,碰到一个*——一个指针。
  • 跳出括号,碰到了(int)——一个带一个int参数的函数。
  • 往左看,发现一个*——(函数)返回一个指针。
  • 跳出括号,往右看,碰到[10]——一个10元素的数组。
  • 往左看,发现一个*——指针。
  • 往左看,发现int——int类型。
    总结:fp1是一个函数指针变量,指向一个形参int,返回值为一个数组指针的函数,该指针指向一个整型指针数组。

再看几个例子:
1.

int *(*(*arr[5]) () ) ();

arr为函数指针数组,该数组的元素指向形参为空,返回值为函数指针的函数。该指针指向一个形参为空,返回值为int *的函数。
2.

float (*(*b())[])();

b为函数,该函数形参为空,返回值数组指针,该指针指向一个函数指针数组,数组的元素指向一个形参为空,返回值为float的函数。
3.

void *(*c)(char a, int (*b)());

c为函数指针变量,指向一个有两个参数,返回值为void*的函数,第一个形参为char,第二个形参为函数指针,该指针指向一个形参为空,返回值为int的函数。
4.

float (*(* e[10])(int *))[5];

e为函数指针数组,数组元素指向一个形参为int *,返回值为数组指针,指向的数组为float型数组。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值