数据结构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