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



我试图理解C++中用作参数的一段代码,但在互联网上似乎找不到其他例子。这是一个片段:

void (*cb)(void)

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

在本例中,cb是指向不带参数且没有返回值的函数的指针

例如,如果我有

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

然后我可以稍后使用

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

我可以使用调用函数

cb(); 

它将调用printHello();

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

通常为了清楚起见,程序员会为此创建一个特定的类型,以避免编写以下内容:

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

为了进行比较,指向返回int的函数的指针看起来像:

int (*ptrToFunctionReturningInt)(void);

指向一个取int而不返回任何值的函数的指针看起来像:

void (*ptrToFunctionReturningNothing)(int);

cb是指向函数的指针,该函数不接受任何参数,也不返回任何值。

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

相关内容

最新更新