2011-08-30 150 views
5

为什么没有'&'的赋值在下面的代码中编译?我用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; 
} 

回答

13

这完全没问题。两个陈述完全相同。函数lvalue被转换为一个指针,通过标准转换来运行。 §4.3/ 1:

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

+0

啊谢谢,我一直在努力寻找一个参考。 –