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

时间:2015-05-12 08:14:57

标签: c++ pointers void

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

void (*cb)(void)

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

2 个答案:

答案 0 :(得分:9)

在这个例子中,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);

答案 1 :(得分:2)

cb是指向函数的指针,它不带任何参数并且不返回任何值。

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