空指针初始化?如果不是,那是什么?

Void pointer initialization? If not, what is it?

我试图理解在 C++ 中用作参数的一段代码,但我似乎无法在 Internet 上的其他地方找到它的另一个示例。这是片段:

void (*cb)(void)

这是另一种初始化空指针的方法吗?这样做与 void *cb 相比有什么好处?

cb 是一个指向 函数的指针 不带任何参数也不返回任何值。

它通常用于实现回调机制:即,如果它被传递给一个函数,那么该函数可以 调用 cb 使用 cb();

在这个例子中,cb 是一个指向函数的指针,该函数不带参数且没有 return 值

例如,如果我有

void printHello( ) {
    cout << "hello" << endl;
}

那我以后可以

void (*cb)(void);
cb = printHello;

我可以调用该函数:

cb(); 

这将调用 printHello();

这样做的好处是我现在可以将不同的函数分配给 cb 并调用它们并将它们传递给其他函数,就像任何其他指针变量一样。

通常为了清楚起见,程序员会为此创建一个特定的类型以避免不得不写这个满口的:

typedef void (*tPrtToVoidFn)(void);
tPtrToVoidFn  cb;
cb = printHello;

为了比较,指向函数的指针 return 是一个 int 看起来像:

int (*ptrToFunctionReturningInt)(void);

和一个指向采用 int 的函数的指针并且 returning 没有任何东西看起来像:

void (*ptrToFunctionReturningNothing)(int);