编辑:有人指出这个问题有点令人困惑。简短的版本是:“为什么有一个单独的指针变量(例如,fnPtr
)它指向一个函数(例如,fn
) 当函数名fn
本身,没有参数,已经是一个指针? /编辑
我正在尝试了解一些内容,并且可以使用社区有关函数指针的反馈。 (虽然这可能看起来像该主题的其他问题的重复,但实际上不是,至少我找不到。)
我理解指向函数的指针被用作另一个函数的参数作为回调的概念......即告诉fn1
to use fn2
在执行过程中以某种方式fn1
。我不明白的是所有这些都使用了复杂的语法。如果fn
是一个定义的函数,然后调用fn(...)
将使用提供的参数执行该函数。然而,fn
单独使用的是函数的地址,即指向函数的指针。此外,fn
, &fn
, and *fn
都是一样的东西。为什么有专用的函数指针,以及为什么创建新变量(即,fnPtr
) 指向一个函数...函数名已经是它自己的指针了!
这段代码每次编译和运行都是一样的。
#include <stdlib.h>
#include <stdio.h>
int fn(int var) { //fn is a function which takes an int and returns an int
return var;
}
int (*fnPtrAmp)(int) = &fn;
int (*fnPtr)(int) = fn;
int needsCallback(int variable, int callback(int)) {
return callback(variable);
}
int needsCallbackPointer(int variable, int (*callbackPtr)(int)) {
return callbackPtr(variable);
}
int needsCallbackPointerWithDereference(int variable, int (*callbackPtr)(int)) {
return (*callbackPtr)(variable);
}
int main() {
printf("%d\n", fn(4));
printf("%d\n", fnPtr(4));
printf("%d\n", (*fnPtr)(4));
printf("%d\n", needsCallback(4,fn));
printf("%d\n", needsCallbackPointer(4,fnPtr));
printf("%d\n", needsCallbackPointer(4,fn));
printf("%d\n", needsCallbackPointer(4,&fn));
printf("%d\n", needsCallbackPointerWithDereference(4,fnPtr));
printf("%d\n", needsCallbackPointerWithDereference(4,fn));
printf("%d\n", needsCallbackPointerWithDereference(4,&fn));
return 0;
}
最简单的语法是needsCallback
但这并没有在任何地方完成,它总是needsCallbackPointer
and fnPtrAmp
。为什么?和needsCallback
您甚至不必定义额外的变量作为函数指针。正如我之前所说,函数名称是它自己的指针!
可以使用一些反馈...谢谢。