c – 不同的函数指针语法作为另一个函数的参数
发布时间:2020-12-16 09:43:58 所属栏目:百科 来源:网络整理
导读:int func (){ printf("foo()n"); return 0;}void foo1 (int (*pf)()) { pf(); }void foo2 (int (pf)()) { pf(); }void foo3 (int pf()) { pf(); }int main (){ foo1(func); foo2(func); foo3(func);} 传递给foo1(),foo2()和foo3()的参数之间有什么区别. 所
int func () { printf("foo()n"); return 0; } void foo1 (int (*pf)()) { pf(); } void foo2 (int (pf)()) { pf(); } void foo3 (int pf()) { pf(); } int main () { foo1(func); foo2(func); foo3(func); } 传递给foo1(),foo2()和foo3()的参数之间有什么区别. 解决方法
它们之间没有区别.第一个参数是指向函数类型的指针,而另外两个只是编写相同函数类型的两种方式.但是,与将数组类型参数调整为指针的方式相同,函数类型参数被调整为指向函数的指针.从C11§8.3.5/ 5:
或者来自C99§6.7.5.3/ 8:
所以第二个和第三个函数声明的参数类型调整为与第一个相同. 请注意,您可以在标识符周围添加任意数量的括号,它仍然是相同的函数类型: void foo2 (int (((((pf)))))()) { pf(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |