[牛人杂谈] C语言的结构体里可以放函数指针

[复制链接]
745|3
 楼主| 734774645 发表于 2024-3-5 17:17 | 显示全部楼层 |阅读模式
这在一些场景下很有用,比如实现类似于面向对象编程中的虚函数(通过函数指针来实现多态性)。下面是一个简单的例子:
  1. #include <stdio.h>

  2. // 定义一个函数指针类型,用于指向特定的函数签名
  3. typedef void (*FunctionPtr)(void);

  4. // 定义一个结构体,其中包含一个函数指针成员
  5. struct MyStruct {
  6.     FunctionPtr func_ptr;
  7. };

  8. // 定义一个函数,用于传递给结构体的函数指针成员
  9. void function1() {
  10.     printf("Function 1 called\n");
  11. }

  12. // 定义另一个函数
  13. void function2() {
  14.     printf("Function 2 called\n");
  15. }

  16. int main() {
  17.     struct MyStruct obj1, obj2;

  18.     // 将函数指针分配给结构体的函数指针成员
  19.     obj1.func_ptr = &function1;
  20.     obj2.func_ptr = &function2;

  21.     // 通过结构体中的函数指针成员调用函数
  22.     obj1.func_ptr();
  23.     obj2.func_ptr();

  24.     return 0;
  25. }
在这个例子中,MyStruct结构体包含了一个名为func_ptr的函数指针成员。然后,在main()函数中,我们创建了两个结构体对象obj1和obj2,并将不同的函数指针分配给它们的func_ptr成员。最后,通过调用obj1.func_ptr()和obj2.func_ptr(),我们可以分别调用不同的函数。
dongnanxibei 发表于 2024-3-9 22:38 | 显示全部楼层
指针也是个变量,所以可以放。
dongnanxibei 发表于 2024-3-9 22:39 | 显示全部楼层
变量是否是普通数值还是作为指针,都是程序决定的。
zhuomuniao110 发表于 2024-3-10 17:18 | 显示全部楼层
指针也是变量,所以可以存。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

3588

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部