关于函数指针

概念:函数名实际代表函数的开始地址,它可以直接送给一个指针变量,不过送地址方式比较特殊,例如:

int add(int a,int b);

int(*p)(int a,int b);

p=add;//将函数add地址送给指针p

如果想使用类型定义的话,需要如下这么做:

typedef int(* pstr)(int,int)//定义指针变量pstr为函数指针

int add(int a,int b);

pstr p;//定义p为指向返回值为int,输入参数为两个int的函数指针

p=add;//建立指针变量和add函数的绑定关系。

基础知识介绍完,来一个有点难度的测试函数如下:

建立5个函数,返回值为int,输入参数为两个int,函数名字分别为:add\sub\mul\chu\yu。同时定义指针类型pstr,可以指向同类型函数,再建立函数指针数组,分别存放五个函数的入口地址,然后调用for循环,分别回调这五个函数。运行结果参照下面:

 重点语句:

pstr * p1=arr;

arr是函数指针数组的首地址,也是第一个元素占用的首地址,这个地址开始的8个字节存的函数add的地址,因为pstr类型的变量直接指向一个函数指针,存放函数指针的地址当然是要在这个基础上再加一重指针,所以p的变量类型为 pstr *。

(*(p1+i))(50,30)指针进行解引用时,保证解引用字符*和被解引用的对象放在一起,所以(*(p1+i))可以直接得出arr数组中的元素,也就是函数入口地址。

最后发出个感慨:学好c指针,C语言平推。学好C语言,就向嵌入式迈进一大步。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值