让我们看看这段代码:
imageNames.contains(".DS_Store") ? imageNames.remove(at: imageNames.index(of: ".DS_Store")!) : imageNames[0]
设置#include <stdio.h>
typedef int (*callback) (void *arg);
callback world = NULL;
int f(void *_) {
printf("World!");
return 0;
}
int main() {
printf("Hello, ");
// world = f;
world = &f; // both works
if (world != NULL) {
world(NULL);
}
}
变量时,两者都有
world
和world = f;
有效。
我应该使用哪个?它取决于编译器还是C版本?
world = &f;
答案 0 :(得分:3)
world = f;
和world = &f;
都有效,因为f
和&f
在将其作为参数传递时没有区别。
参见C99规范(第6.7.5.3.8节)。
参数声明为''函数返回类型''应调整为''函数返回类型的指针'',如6.3.2.1中所述。
答案 1 :(得分:1)
您的函数f
的类型为int (void *_)
。只要在表达式中使用f
,它就会隐式转换为指向自身的指针,类型为int(*) (void *_)
。
我应该使用哪个?
因此,出于所有实际目的,函数f
的名称和指向同一函数&f
的指针是可互换的。另请查看"Why do all these function pointer definitions all work? "
是否依赖于编译器或C版本?
不依赖于任何编译器或C版本。