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