【发布时间】:2014-03-19 06:21:52
【问题描述】:
我正在阅读算法设计手册,在第 3 章中,出现了以下代码 sn-p。它与从链表中删除项目有关。这个问题与数据结构无关,而只是与声明了两个变量的单行代码我认为有关。为简洁起见,我删除了代码中不相关的部分。
list *search_list(list *l, item_type x) {
// This function just searches the list x
}
list *predecessor_list(list *l, item_type x) {
// This function simply returns the predecessor of x or NULL
}
delete_list(list **l, item_type x) {
list *p; /* item pointer */
list *pred; /* predecessor pointer */
list *search_list(), *predecessor_list(); // What are these declarations?
p = search_list(*l,x);
// Code to delete the node if found is here
}
我的问题在delete_list function,特别是list *search_list(), *predecessor_list(); 行。那条线上发生了什么?我猜它是一个指向函数的指针,但我的理解是你应该用适当的参数声明函数指针。另外,假设我是对的,为什么还需要这些行?
【问题讨论】:
-
我猜这些是函数声明,(不是原型,声明)。在这里阅读stackoverflow.com/a/5481685/2549281,我很确定它们不是必需的。尝试删除它们。
-
删除它们后代码可以正常工作,但是乍一看,这很奇怪。我把它读作“search_list 是一个指向返回列表的函数的指针”,这显然没有意义。
-
您的大部分问题都已得到解答,因此我将仅评论您所说的部分:“我猜它是指向函数的指针”。供将来参考 - 指向函数的指针需要在
*和函数名称周围加上括号:list (*search_list)()。
标签: c algorithm pointers function-pointers