结构体函数指针解析

#include <stdio.h>
#include <stdlib.h>
void (*pfun)(int data);
void myfun(int data)
{
printf(“get data:%d\n”,data);
}
int main(int argc,char *argv[])
{
pfun = myfun;
(*pfun)(100);
return 0;
}
从这个例子可以看到,我们首先定义了一个函数指针pfun ,
这个函数指针的返回值为void型,然后我们给函数指针赋值,赋值为myfun,
也就是myfun函数的首地址,在C99中myfun函数名就是myfun函数的首地址,
此时pfun获得了myfun的地址,pfun的地址等于myfun的地址,所以最终调用pfun();也就相当于调用了myfun();

第二种用法:typedef 原变量类型 别名
也可以用typedef来定义一个指针函数这样使在大型代码中更加简洁
#include <stdio.h>
#include <stdlib.h>
typedef void (*pfun)(int data);
/typedef的功能是定义新的类型。第一句就是定义了一种pfun的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回void类型。/
void myfun(int data)
{
printf(“get data:%d\n”,data);
}
int main(int argc,char argv[])
{
pfun p= myfun; //函数指针指向执行函数的地址
p(100);
return 0;
}
这里面的pfun代表的是函数的类型,通过pfun来代表void (
)(int)函数类型即pfun是指针函数的别名,pfun p相当于定义了一个
void (*p)(int)函数指针。p = myfun可以理解为将函数指针p指向myfun函数的地址,p(100);相当于执行myfun(100);

第三种用结构体函数指针的方法
#include <stdio.h>
#include <stdlib.h>
typedef struct gfun{
void (*pfun)(int);
}gfun;
void myfun(int data)
{
printf(“get data:%d\n”,data);
}
int main(int argc,char *argv[])
{
gfun gcode={
.pfun = myfun, //将函数指针指向要调用函数的地址
};
gcode.pfun(100);
return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值