加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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()的参数之间有什么区别.
所有3种语法compiles fine in g++都以相同的方式运行.技术上都是3个叫做函数指针的吗?
标有C,因为它也适用于此.

解决方法

它们之间没有区别.第一个参数是指向函数类型的指针,而另外两个只是编写相同函数类型的两种方式.但是,与将数组类型参数调整为指针的方式相同,函数类型参数被调整为指向函数的指针.从C11§8.3.5/ 5:

After determining the type of each parameter,any parameter of type […] “function returning T” is adjusted to be […] “pointer to function returning T,”

或者来自C99§6.7.5.3/ 8:

A declaration of a parameter as “function returning type” shall be adjusted to “pointer to function returning type

所以第二个和第三个函数声明的参数类型调整为与第一个相同.

请注意,您可以在标识符周围添加任意数量的括号,它仍然是相同的函数类型:

void foo2 (int (((((pf)))))()) { pf(); }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读