我想知道C中的int (**ppf)(int)
和int (*pf)(int)
之间是否存在差异。
C有一种处理函数指针的奇怪方法,其中函数自动转换为指向函数的指针。这允许程序员编写非常奇怪的东西。
double (*pf)(double) = ***&*&***&*sin;
(******&*&*puts)("Hello, world!");
这真的很奇怪,我看不出它是如何有用的。
以下是关于指向C中指向函数的指针的问题。
int (**ppf)(void)
的间接级别是否比int (*pf)(void)
更多?
是否有使用(**ppf)()
优于(*pf)()
的情况?
它们之间是否有任何差异?
甚至可以在C?
中获得指向函数指针的指针答案 0 :(得分:4)
是的,(**ppf)()
和(*pf)()
之间存在差异。指向函数的指针存在于c中。
void f();
void (*pf)() = f // or &f
void (**ppf)(e) = &pf;
以下任何一个函数调用都可用于调用函数f
:
使用f
:f(); ( &f)(); (*f)(); (**f)(); (***f)();
使用pf
:pf(); (*&pf)(); (*pf)(); (**pf)(); (***pf)();
使用ppf
:(*ppf)(); (********ppf)
答案 1 :(得分:0)
他们是不同的类型。它们甚至是不同类型的类型; C区分对象指针和函数指针。任何函数指针都可以分配给任何其他函数指针(没有强制转换),但对于对象指针则不然。
显然,pf
是一个函数指针。但是指向函数指针的指针是指向对象的指针,即指向函数指针。