复杂指针的定义(含复杂函数指针)

引言

指针是C/C++语言中很重要的机制,一些C语言高级用法基本都需要指针的参与。
一些复杂指针可能理解起来有点难度,但只要你掌握相应的技巧,这一切都能迎刃而解。
本文从定义的角度, 解析复杂指针。

具体解析过程

int   p;

定义普通变量p
int   *p;

定义一个指向int变量的指针p
int   p[3];

定义一个含有三个元素的数组p


int   *p[3];

[]优先级比*高,因此p先与[]结合,说明p首先是个数组,

然后再与*结合,说明数组中的元素是指针,

然后再与int结合,说明该指针指向的类型是int。


int   (*p)[3];

()的优先级最高,因此p先与*结合,说明p首先是个指针,

然后再与[]结合,说明指针指向的内容是数组,

然后在与int结合,说明数组中的元素为int。


int   **p;

p与最近的*结合,说明p首先是个指针A,

然后再与*结合,说明该指针指向的内容也是一个指针B,

然后再与int结合,说明指针B指向的内容为变量int。


int   p(int);

p与()结合,说明p首先是个函数,

然后再与int结合,说明函数的返回值是int变量。


int   (*p)(int);

()的优先级最高,因此p先与*结合,说明p首先是个指针,

然后再与()结合,说明该指针指向的内容是函数,

再与括号里面的int结合,说明该函数的参数有一个int,

再与前面的int结合,说明该函数的返回值为int。


int   *(*p(int))[3];

()的优先级最高,因此p先与()结合,说明p首先是个函数,

再与括号内的int结合,说明函数的参数为一个int,

再与p前面的*结合,说明函数的返回值为一个指针A,

再与后面的[]结合,说明该指针A指向的内容是一个数组,

再与第一个*结合,说明数组里面的元素是指针B,

再与前面的int结合,说明指针B指向的内容是一个int。


int   (*(*p)(int))(int);

()的优先级最高,因此p先与*结合,说明p首先是个指针A,

再与后面()结合,说明该指针A指向的内容是一个函数A,

再与括号中的int结合,说明该函数的参数是一个int,

再与(*p)前面的*结合,说明该函数的返回值是一个指针B,

再与最后面的()结合,说明该指针B指向的内容提要是一个函数B,

再与括号中的int结合,说明该函数B的参数是一个int,

再与前面的float结合,说明函数B的返回值为float。

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值