c - C语言中函数指针在数据结构开发中的使用
问题描述
下学期我有一个算法课程,所以我潜入了 C 语言,目的是提前准备一些数据结构。
当我了解函数指针时,我发现我可以将它们存储在其中structs
并为我的数据结构创建类似面向对象的用途。这是一个例子:
#include <stdio.h>
void insert(char * object)
{
printf("Adding %s to the data structure\n", object);
}
typedef struct data_structure {
char * obj;
void (*insert)(char * object);
} data_structure;
int main()
{
data_structure d;
d.insert = insert;
d.insert("bacon");
return 0;
}
但是这种程序在用C语言学习数据结构和算法的范围内真的有用吗?或者它只是在数据结构上占用内存?
我发现其他帖子谈论函数指针,但没有探讨这种方法。我认为这可能对一群好奇的学生有用:)
解决方案
在过去,我确实看到过以这种方式构造的对象作为有效表示 vtable 的函数指针集。通常,对于 vtable,您会添加一个额外的间接级别,以便具有相似特征的所有数据对象都指向同一个函数指针对象。如果有超过 1 个函数,这会降低每个数据对象的成本,但执行成本会很小。
它也可以作为一种轻量级的方式来组织和构造函数+voiddata回调对象,坚持数据的第一个成员是回调函数。当然,您不能使用 c 定义继承的类,但您可以拥有嵌套结构,这些结构可以被欺负到相同的目的。
推荐阅读
- css - 如何使内联图像在较小的屏幕中响应
- powershell - 在 TFS 2015 构建中运行 PowerShell 脚本时无法加载模块错误
- php - “if”语句比较运算符的操作顺序
- javascript - 如何在 Phaser 3 中旋转区域?
- asp.net - Datadog - 监控由 IIS 托管的同一站点中的多个应用程序
- c# - 如何使用 Moq 模拟扩展方法 | 网址.Page()
- php - mysqli_num_rows($result)==0 返回错误
- laravel - Laravel Nova 未来指标趋势
- python - 如何使用分隔符拆分 Ansible 中的值
- java - 使用带有托管服务标识的 Spring api 获取 keyvault 机密