指向函数指针(** ppf)()的指针与C中函数(* pf)()的指针有什么不同?

时间:2015-04-25 21:25:33

标签: c function pointers function-pointers

我想知道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?

中获得指向函数指针的指针

2 个答案:

答案 0 :(得分:4)

是的,(**ppf)()(*pf)()之间存在差异。指向函数的指针存在于c中。

void f();
void (*pf)() = f // or &f
void (**ppf)(e) = &pf;  

以下任何一个函数调用都可用于调用函数f
使用ff(); ( &f)(); (*f)(); (**f)(); (***f)();
使用pfpf(); (*&pf)(); (*pf)(); (**pf)(); (***pf)();
使用ppf(*ppf)(); (********ppf)

答案 1 :(得分:0)

他们是不同的类型。它们甚至是不同类型的类型; C区分对象指针函数指针。任何函数指针都可以分配给任何其他函数指针(没有强制转换),但对于对象指针则不然。

显然,pf是一个函数指针。但是指向函数指针的指针是指向对象的指针,即指向函数指针。