【问题标题】:pass function as parameter with and withou ampersand c [duplicate]将函数作为参数传递,带和不带与号 c [重复]
【发布时间】:2019-01-28 21:04:25
【问题描述】:

我想传递一个函数作为参数,但我很困惑是否应该用 & 号传递它。以下 sn-p 以两种方式工作。为什么?

#include <stdio.h>

int print(int pas){
return pas;
}


int func_print(int (*k)(int)){
(*k)(555);
}

int main(){



printf("%d",func_print(print));
printf("%d",func_print(&print));

return 0;
}

【问题讨论】:

  • 它被隐式转换为指向函数的指针。

标签: c function parameters


【解决方案1】:

函数名称是特殊的。

在不调用函数的情况下使用时,它会自动转换为指向函数的指针。所以&amp;printprint*print**print***print等都计算为int (*)(int)类型的相同表达式。

【讨论】:

  • 事实上,函数标识符被转换为指向函数的指针, 或 _Alignof 运算符 (C11 6.3.2.1/4)。特别是,这是函数调用表达式的操作数唯一允许的类型族:“表示被调用函数的表达式应具有指向函数 [...] 的类型指针”(C11 6.5.2.2/1)。这与衰减为指针的数组非常相似。
猜你喜欢
  • 2015-03-02
  • 1970-01-01
  • 2011-04-07
  • 2015-11-08
  • 2019-11-21
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多