list - 用 free 调用的函数指针
问题描述
我正在练习一本关于使用 C 编程的算法的书中的一些程序。我看到以下功能:
void list_init(List *list, void (*destroy)(void *data)) {
/* Initialize the list. */
list->size = 0;
list->destroy = destroy;
list->head = NULL;
list->tail = NULL;
return;
}
后来被称为:
list_init(&list, free);
我认为free
是 C 语言中的一个函数,它被描述为:void free(void *ptr)
因此需要一个参数。
那么,为什么free
单独作为参数提供list_init
呢?有人可以帮我理解吗?
谢谢。
解决方案
我想出了这个。当调用 list->destroy(data) 时,free 的参数在另一个函数中提供。这是因为 list->destroy 设置为 'free' 的地址。
推荐阅读
- java - 按照 Venkat Subramaniam 的书使用 lambda 表达式来玩策略设计模式?
- php - PayPal + PHP - 获取收款(start_time / end_time)
- html - Github,Jupyter - 在上传到 github 的 jupyter notebook 中将文本居中对齐
- apache-camel - 使用 ProducerTemplate 时没有出现 CamelFileNameProduced 标头
- python - 熊猫申请方法 | 字符串被识别为浮点数
- typo3 - 隔离页面刷新:我可以在 TYPO3 10.4.9 中嵌入子页面作为内容元素吗?
- flutter - 在 Flutter 中自定义嵌入式 Mapbox 导航屏幕
- python - 首次调用时计算可选实例变量的 Pythonic 方式
- sql - 如果有匹配项,则在复制副本中匹配值
- go - Golang 在 OOM 上运行 GC