指针指向函数赋值

pointer to function assignment

本文关键字:赋值 函数 指针      更新时间:2023-10-16

为什么没有'&'的赋值会在下面的代码中编译?我用GCC 3.4.6编译代码。不带&是对的吗?还是说这是GCC的一个"特性"?

void func() {
}
int main() {
  typedef void (*F)();
  F f;
  f = &func; // the way of assigning pointer to function.
  f = func;  // this is also working.
  (*f)();
  return 0;
}

这完全没问题。两个表述是完全等价的。通过标准转换将函数lvalue转换为指向函数的指针。§4.3/1:

函数类型T的左值可以转换为"指向T的指针"类型的右值,结果是指向该函数的指针。