我无法理解为什么不同的代码会起作用,因为它们是相同的。
#include <stdio.h>
void foo() {
printf("Hello\n");
}
void foo1(void fn()) {
(*fn)();
fn();
}
void foo2(void (*fn)()) {
(*fn)();
fn();
}
int main(void) {
foo1(foo);
foo2(foo);
return 0;
}
如果它们相同,那么为什么这不起作用?
typedef void F1(), (*F2)();
int main(void) {
F1 f1;
F2 f2;
// error: lvalue required as left operand of assignment
f1 = foo1;
f2 = foo2;
return 0;
}
P.S。
我的兴趣不在于typedef
(第二个例子)
我只对第一个例子有疑问
那就是:
答案 0 :(得分:1)
您正在错误地使用typedef。第一个F1()
根本不是函数指针。您的第二部分正确地为函数指针(*F2)()
提供了typedef,但是您没有包含类型。底线,但你不能在一行中获得2个函数指针typedef:
typedef void (*F1)();
typedef void (*F2)();
将同时创建F1
的typedef和F2
的typedef。
对于函数指针的 use ,函数指针可以与parens和dereference一起使用,也可以不使用。
(*fn)();
fn();
两者都是等价的,只需调用fn
指向的函数即可。