【发布时间】:2018-12-28 07:58:22
【问题描述】:
我有这段代码:
(*I_dont_know ())[(int) ((*ptr))]
I_dont_know(), a function which takes void and returns a pointer.
ptr is an integer pointer.
据我所知[(int)((*ptr))] ---> ptr 是一个返回整数的函数指针,其余我没有得到。有人可以解释一下吗?
【问题讨论】:
-
什么是
I_dont_know和ptr? -
片段无法编译。这使得任何人都无法帮助您解码它——我们不知道它应该是什么。您必须提供 MCVE (minimal reproducible example)! (什么是“
I_dont_know”和ptr,分号在哪里,这是在全局范围内还是在函数内部?) -
如果有人问我c中的int a是什么意思,我会简单地回答a是整数类型的变量。 @Fei 我不会哭,因为我不知道什么是 a。
-
@JonathanLeffler。如果有人像我一样,什么是 (int)(*func) (int)。我将简单地回答,因为 func 是一个指向函数的指针,它以一个整数作为参数并返回一个整数而不是说 blah blah blah ...
-
好吧,既然
(int)(*func)(int)可以编译——加上分号——我可以毫无问题地解释在指向函数的指针的返回类型周围有一组冗余括号单个int参数并返回int值。在标准 C(C90、C99、C11、C17)中,显示的代码无法编译,即使在末尾添加了分号。它当然需要更多的上下文来显示正在发生的事情。如果ptr被声明为int (*ptr)();,那么你对[(int)((*ptr))]的分析是不正确的——像这样取消引用函数指针是无效的。
标签: c arrays function-pointers