回调函数练习

本文介绍了一个使用C语言实现的结构体与联合体的应用案例,通过定义不同的结构体类型并利用联合体将它们组合在一起,展示了如何在运行时根据实际需求选择合适的结构体进行操作。该案例还涉及了函数指针的使用,使得结构体的操作更加灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

API.h

#ifndef API
#define API
#include <iostream>
#include <string>
using namespace std;
typedef struct
{
	int face;
	float height;
	short weight;
} StructTypeA;
typedef struct
{
	int sex;
	string background;
} StructTypeB;
typedef union
{
	StructTypeA appearance;
	StructTypeB attribute;
}UnionType;
typedef void(*pEvaluate) (UnionType *unionA);
typedef void(*pFunctionB)  (int factor);
typedef struct
{
	pEvaluate pA;
	pFunctionB pB;
}StructforpFunction;
void Register(StructforpFunction* pStructC1);
void CallBack(void);
#endif
main.c

#include "api.h"
void Evaluate(UnionType *unionA);
int main()
{
	StructforpFunction functionstruct =
	{
		Evaluate
	};
	Register(&functionstruct);
	CallBack();
}
void Evaluate(UnionType *unionA)
{
	switch (unionA->attribute.sex)
	{
	case 1:
		printf("a girl!");
		cout<< unionA->attribute.background;
		while (1);
		break;
	case 2:
		printf("a boy...");
		break;
	default:
		break;
	}
};
API.c

#include "api.h"
static StructforpFunction *api;
void Register(StructforpFunction* pStructC1)
{
	if (pStructC1)
	{
		api = pStructC1;
	}
}
StructTypeB B = { 1 , "my girlfriend" };
StructTypeB *pB = &B;
void CallBack(void)
{
	api->pA((UnionType *)pB);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值