数据结构7-基本的回调用法

本文展示了在C语言中如何使用数据结构来封装函数,并通过回调函数进行交互。示例中定义了一个学生结构体,包含设置姓名、年龄和体重的方法,以及显示信息的回调函数。程序演示了直接调用成员函数、作为参数传递回调、结构体成员赋值以及未初始化的回调调用导致的段错误情况。
摘要由CSDN通过智能技术生成

数据结构7-基本的回调用法

code:

#include <stdio.h>


void set_name(char *name, void (*callback)(void));
void set_age(int age);
void set_weight(int weight);
void get_show_student();

typedef struct
{
	void (*set_name)(char * name, void (*callback)(void));
	void (*set_age)(int  age);
	void (*set_weight)(int  weight);
	void (*get_show_student)(void);

}student;

static student student_s = 
{
	.set_name = set_name,
	.set_age = set_age,
	.set_weight = set_weight,
	.get_show_student = get_show_student,

};
student student2_s; 

int i=0;

void set_name(char *name,void (*callback)(void))
{
	printf("name: %s\r\n",name);
    callback();
	i++;
}

void set_age(int age)
{
	printf("age: %d\r\n",age);
	i++;
}

void set_weight(int weight)
{

	printf("weight: %d\r\n",weight);
	i++;
}


void get_show_student()
{
	printf("get_show_student: %d\r\n",i);
}

int main()
{
    printf("start ... \r\n");
    
    //1.回调直接调用
    student_s.set_age(10);
    student_s.set_weight(110);
    
    //2.函数参数使用回调
	student_s.set_name("zhang er",get_show_student); //= "zhang yi";
    student_s.get_show_student();
    
    //3.赋值另一个结构回调
    student2_s.set_age = student_s.set_age;
    student2_s.set_name = student_s.set_name;
    //4.回调 , 如果没有赋值,直接回调,会出现段错误
    student2_s.set_age(20);
    student2_s.set_name("zhang yi",get_show_student);
    student_s.get_show_student();
    

	return 0;
}

结果:
start ... 
age: 10
weight: 110
name: zhang er
get_show_student: 2
get_show_student: 3
age: 20
name: zhang yi
get_show_student: 4
get_show_student: 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农-老七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值