空指针初始化?如果不是,那是什么?
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);
我试图理解在 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);