指向函数及其 return 类型的指针 (void)
Pointer to a function and its return type (void)
这样的声明void *(*function) ()
有效吗?
如果它有效,那么 *function
将 return 任何地址到被调用的函数。
在那个地址,returning 的值是多少?
在该地址保存的值是否为 0。如果为零,return 0
和 return 之间的区别是什么 return 类型 void
的函数中没有任何内容。
符号
void * (*function)();
的意思是“声明一个名为function
的函数指针,它指向一个接受未指定数量参数的函数,然后return是一个void *
。”
因为这只是声明了一个变量,它没有定义一个函数,所以没有什么可以说的 returned。您需要先将 this 指针指向一个函数,然后才能调用它。
一旦你分配 function
指向某物,如果你调用 function
,你将得到一个 void *
,你可以将其视为“纯内存” address”,因为它包含地址但不能在没有转换的情况下取消引用到对象。
请注意,returning void *
与具有 void
return 类型的函数不同。前者的意思是“我return一个内存地址”,后者的意思是“我根本return什么都没有。”
声明内容如下:
function -- function is a
*function -- pointer to
(*function) () -- function taking unspecified parameters
*(*function) () -- returning pointer to
void *(*function) (); -- void
因此,function
是指向函数类型的 指针 ,而不是函数本身。您可以有多个函数,每个函数返回指向 void
:
的指针
void *foo( void ) { ... }
void *bar( void ) { ... }
void *bletch( void ) { ... }
您可以使用 function
指针指向每个函数,并在运行时决定调用哪个:
if ( condition1 )
function = foo;
else if ( condition2 )
function = bar;
else
function = bletch;
void *ptr = function(); // or (*function)();
这样的声明void *(*function) ()
有效吗?
如果它有效,那么 *function
将 return 任何地址到被调用的函数。
在那个地址,returning 的值是多少?
在该地址保存的值是否为 0。如果为零,return 0
和 return 之间的区别是什么 return 类型 void
的函数中没有任何内容。
符号
void * (*function)();
的意思是“声明一个名为function
的函数指针,它指向一个接受未指定数量参数的函数,然后return是一个void *
。”
因为这只是声明了一个变量,它没有定义一个函数,所以没有什么可以说的 returned。您需要先将 this 指针指向一个函数,然后才能调用它。
一旦你分配 function
指向某物,如果你调用 function
,你将得到一个 void *
,你可以将其视为“纯内存” address”,因为它包含地址但不能在没有转换的情况下取消引用到对象。
请注意,returning void *
与具有 void
return 类型的函数不同。前者的意思是“我return一个内存地址”,后者的意思是“我根本return什么都没有。”
声明内容如下:
function -- function is a
*function -- pointer to
(*function) () -- function taking unspecified parameters
*(*function) () -- returning pointer to
void *(*function) (); -- void
因此,function
是指向函数类型的 指针 ,而不是函数本身。您可以有多个函数,每个函数返回指向 void
:
void *foo( void ) { ... }
void *bar( void ) { ... }
void *bletch( void ) { ... }
您可以使用 function
指针指向每个函数,并在运行时决定调用哪个:
if ( condition1 )
function = foo;
else if ( condition2 )
function = bar;
else
function = bletch;
void *ptr = function(); // or (*function)();