[C语言]指针数组和指针数组|函数指针和指针函数

在c语言中最令然头疼的莫过于指针

特别是指针和数组符号一起出现的

傻傻搞不清楚的原因主要在于运算符的优先级没有搞清

指针的运算符*,数组运算符[],函数运算符();

[]数组元算符 运算优先级和函数运算符()或者说强制改变运算顺序符号()都是位于第一优先级的

而我们的指针运算符则是第二优先级



所以当出现

int *a[];

 []比*优先和名称结合,这个时候先结合就代表其属性 肯定是一个数组 数组里面存放着什么?

然后继续结合 *指针  所以就指针数组 最后结合int 指针指向int类型

int *a();

同理可以得到

()和a先结合得到 函数,然后结合* 函数返回指针,最后结合int得到 函数返回指针,指针指向int类型


当我们使用()来改变运算符的结合顺序的时候

比如

int (*a)();
*先和名称结合 得到指针,然后结合()得到函数,所以是指针指向一个函数,然后结合int ,

我们就可以得到 一个函数指针 返回int类型。


最后我们来检验一个比较糟糕的东西

能写出这种东西的人 就应该被人道毁灭

除了考试能用到 我不相信有人在实际开发的时候自己也会用这一坨屎

char ( *( *x[3]) () ) [5]
是在是太糟糕了 不过继续我们的分析

x[3]:数组

*x[3]:指针数组

(*x[3])():指针数组,指针指向函数

*(*x[3])():函数返回的是指针

(*(*x[3])())[5]:函数返回的指针是指向数组的指针

最后结合char:函数返回的指针指向的数组,数组中的元素是char型的

综上,x是一个指针数组,它里边元素是指向返回值为char [5],无参数的函数






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值