C 语言中没有类和对象的概念,但是可以通过 struct 结构体来实现同样的效果。类似 Golang 中的 struct,把 C 函数指针当做 struct 的成员,就可以为 struct 结构体对象添加方法:
#include <stdio.h>
typedef struct People {
int age;
void (*sing)();
int (*getAge)(struct People *p);
void (*setAge)(struct People *p, int);
} People;
void sing() {
printf("singing\n");
}
void setAge(People *p, int a) {
p->age = a;
}
int getAge(People *p) {
return p->age;
}
int main(void) {
People p;
p.age = 18;
// 函数指针初始化
p.sing = sing;
p.getAge = getAge;
p.setAge = setAge;
// 函数调用,可以看做是结构体的成员方法
p.sing();
p.setAge(&p, 30);
printf("getAge: %d\n", p.getAge(&p));
return 0;
}