函数指针在结构体里的赋值与调用

  
#include <stdio.h>  
  
//定义函数指针结构体类型
typedef struct test  
{  
    int (*a)(int a,int b);  
    void (*b)(void);  
    void (*c)(void);  
}test;  
  
//编写函数实现
int f1(int a,int b)
{  
    printf("f1:%d\n",a+b); 
	return a+b;
}  
  
void f2(void)  
{  
    printf("f2\n");  
}  
  
void f3(void)  
{  
    printf("f3\n");  
}  
  
void f4(void)  
{  
    printf("f4\n");  
}  
void f5(void)  
{  
    printf("f5\n");  
}  

void (*p)(void); //定义一个函数指针变量,此时分配了内存

//定义一种新的类型,叫F_TYPE,这种类型是指向形如void f(void)函数的函数指针变量,此时还未分配内存
//以后都可以用这种类型来定义形如void f(void)函数的函数指针变量
typedef void (*F_TYPE)(void); 

int main(void)  
{  
	//定义一个test类型的aa结构体并赋值
    test aa = 
	{  
        a : f1, //方法1  
        .b = f2, //方法2, 一般这种方式在全局变量初始化的时候常用  
    };  
    aa.c = f3; //方法3  
   
    p=f4; //函数指针变量赋值
	
	F_TYPE q;//定义函数指针变量
	
	q = f5; //函数指针变量赋值
	
    int x = aa.a(1,2);  //通过结构体(函数指针)调用函数 ,这种引用不需要 *
    aa.b();  
    aa.c();  
    printf("f1 return %d\n",x);
	
	(*p)();            //这种引用需要加 *
	(*q)();
    return 0;  
}  


运行结果
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值