就是C的结构体嘛?成员包含一般属性和函数指针。函数指针可以赋值同一个,也可以每个实例不同。
- #include <stdio.h>
- #include <math.h>
-
- // 定义函数指针类型
- typedef int (*MathOperation)(int, int);
- typedef void (*PrintFunction)(const char*);
-
- // 定义包含数字成员和函数指针的结构体
- struct Calculator {
- int id; // 数字成员
- float version; // 数字成员
- MathOperation operate; // 函数指针成员
- PrintFunction printer; // 函数指针成员
- };
-
- // 各种数学运算函数
- int add(int a, int b) {
- return a + b;
- }
-
- int subtract(int a, int b) {
- return a - b;
- }
-
- int multiply(int a, int b) {
- return a * b;
- }
-
- // 打印函数
- void fancyPrint(const char* text) {
- printf("✨ %s ✨\n", text);
- }
-
- void simplePrint(const char* text) {
- printf("%s\n", text);
- }
-
- int main() {
- // 创建结构体实例并初始化
- struct Calculator calc1 = {
- .id = 101,
- .version = 1.5f,
- .operate = multiply, // 指向乘法函数
- .printer = fancyPrint // 指向花式打印函数
- };
-
- struct Calculator calc2;
- calc2.id = 102;
- calc2.version = 2.0f;
- calc2.operate = add; // 指向加法函数
- calc2.printer = simplePrint; // 指向简单打印函数
-
- // 使用结构体成员
- int result = calc1.operate(5, 3);
- calc1.printer("Multiplication Result:");
- printf("5 * 3 = %d\n", result);
-
- // 动态切换函数指针
- calc2.printer("Switching to subtraction...");
- calc2.operate = subtract; // 改为指向减法函数
-
- result = calc2.operate(10, 4);
- calc2.printer("Subtraction Result:");
- printf("10 - 4 = %d\n", result);
-
- // 创建结构体数组
- struct Calculator calcs[] = {
- {201, 1.1f, add, simplePrint},
- {202, 1.2f, multiply, fancyPrint}
- };
-
- calcs[0].printer("Array Calculator:");
- printf("7 + 8 = %d\n", calcs[0].operate(7, 8));
-
- return 0;
- }
复制代码
|