我无法弄清楚:
int main() {
int (*) (int *) = 5;
return 0;
}
上面的分配使用g ++ c ++ 11进行编译。我知道这int (*) (int *)
是一个指向接受(int *)
as参数并返回int的函数的指针,但我不明白您如何将其等同于5。起初,我认为这是一个不断返回5的函数(根据我最近的学习F#,可能是哈哈),然后,我简要地想到了,该函数指针指向内存位置5,但这显然不起作用,十六进制值也不起作用。
认为可能是因为该函数返回一个int,并且分配一个int是可以的(以某种方式),所以我也尝试这样做:
int * (*) (int *) = my_ptr
wheremy_ptr
是type int *
,与第二个函数指针的类型相同,第一种情况是int类型。这不会编译。分配5或任何int值而不是my_ptr
都不会为此函数指针编译。
那任务是什么意思呢?
更新1
我们已确认这是一个错误,如最佳答案所示。但是,仍然不知道分配给函数指针的值实际发生了什么,或者分配发生了什么。任何(良好)的解释将不胜感激!请参考下面的编辑以更清楚地了解该问题。
编辑1
我正在使用gcc版本4.8.2(在Ubuntu 4.8.2中)
编辑2
实际上,将其等同于对我的编译器有效的任何东西。甚至将其等同于std :: string变量,或者返回双精度值的函数名称,都可以使用。
编辑2.1
有趣的是,使其成为指向返回非指针数据类型的任何函数的函数指针,将使其进行编译,例如
std::string (*) () = 5.6;
但是一旦函数指针指向返回某些指针的函数,它就不会编译,例如
some_data_type ** (*) () = any_value;