C语言之函数指针,数组指针,函数数组指针

公众号:嵌入式不难

一、定义举例

void ( * ptr_1)(int);

int ( * ptr_2)[20];

char * ( * ptr_3[30])(void *);

二、分析方法

  • 首先需明确C运算符优先级,不明白的可对照度娘来看
    在这里插入图片描述
  • 然后再根据优先级来逐步拆解每一步所代表的含义
  • 最后再将拆解开的每一步的含义结合起来就表示这个式子所代表的含义

三、整合含义

void ( * ptr_1)(int);解析

  • 第一步:运算符寻找法则。
    运算符有 " () " 、" * "
    其中 " * " 结合前后文可以确定为指针含义,指明ptr_1是一个指针。
  • 第二步:运算符分解法则。
    根据 " () " 运算符的结合方向为从左到右,最右边的运算符为 " () " ,可以确定这是一个函数的书写方式,( * ptr_1)这里的括号只是为了提高结合优先级。让 " * " 先与ptr_1结合。
  • 第三步:综合分析法则。
    综上,ptr_1是一个指针。ptr_1指向返回值为空,带入参数为int型参数的函数。

int ( * ptr_2)[20];解析

  • 第一步:运算符寻找法则。
    运算符有 " () " 、" * " 、" [] "
    其中 " * " 结合前后文可以确定为指针含义,指明ptr_2是一个指针。
  • 第二步:运算符分解法则。
    " () " 和 " [] " 处于同一个优先级,所以结合性为从左至右,而最右边的运算符为 " [] " ,可以确定这是一个数组的书写方式。而数组名为( * ptr_2)。
  • 第三步:综合分析法则。
    综上,ptr_2是一个指针。ptr_2指向一个拥有20个元素的一维数组,这个一维数组的每一个元素都是int型数据。

char * ( * ptr_3[30])(void *);解析

  • 第一步:运算符寻找法则。
    运算符有 " () " 、" * " 、" [] "
  • 第二步:运算符分解法则。
    " () " 和 " [] " 处于同一个优先级,且优先级最高,所以结合性为从左至右,而最右边的运算符为 " () " ,可以确定这是一个函数的书写方式。而函数名为( * ptr_3[30])。然后开始分析( * ptr_3[30]), 这里需要注意( * ptr_3[30])等同于( (* ptr_3)[30]),这一部分为数组书写方式,数组名为(* ptr_3),可以得知ptr_3是一个数组指针。
  • 第三步:综合分析法则。
    综上,ptr_3是一个指针。ptr_3指向一个拥有30个元素的一维数组,这个一维数组的每一个元素是返回值为char *型,带入参数为void *型的函数指针。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值