最佳答案
我不明白:
int main() {
int (*) (int *) = 5;
return 0;
}
上面的赋值用 g + + c + + 11编译。我知道 int (*) (int *)
是一个函数的指针,它接受一个 (int *)
作为参数并返回一个 int,但我不明白你怎么能把它等同于5。起初我认为这是一个不断返回5的函数(从我最近在 F # 的学习中,可能,哈哈) ,然后我想,简单地说,函数指针指向内存位置5,但这显然不起作用,十六进制值也不起作用。
我想这可能是因为函数返回了一个整型数,赋值一个整型数是可以的(不知何故) ,我还试了下面这个方法:
int * (*) (int *) = my_ptr
其中,my_ptr
是类型为 int *
的,与第二个函数指针的类型相同,就像第一个类型为 int 的情况一样。这不能编译。赋值5或任何 int 值,而不是 my_ptr
,也不能为这个函数指针编译。
作业是什么意思?
更新1
我们已经确认这是一个错误,如最佳答案所示。然而,我们仍然不知道分配给函数指针的值实际上是多少,也不知道分配后会发生什么。任何(好的)解释,将非常感谢!请参阅下面的编辑更清楚的问题。
编辑1
我使用的是 gcc 版本4.8.2(在 Ubuntu 4.8.2中)
编辑2
实际上,把它等同于任何在我的编译器上工作的东西。即使将其等同于 std: : string 变量或返回 double 的函数名也是可行的。
编辑2.1
有趣的是,将其设置为任何返回非指针数据类型的函数的函数指针,将允许它进行编译,例如
std::string (*) () = 5.6;
但是一旦函数指针指向一个返回某个指针的函数,它就不会编译,比如 with
some_data_type ** (*) () = any_value;