我想声明一个指向函数的指针类型的变量,返回指向函数的指针。本质上,以下命令可以执行以下操作,但不包含任何typedef
s:
typedef void (*func)();
typedef func (*funky_func)();
funky_func ptr;
我尝试了以下
(void (*)()) (*ptr)();
但它给出了“未声明的标识符”错误- ptr
(可能是由于完全不同的解析)。我对解析C ++的复杂性并不了解,所以我想知道这是否可能,如果可以,怎么做。
(出于好奇,请出于好奇而将其视为完全人为的情况,没有任何实际原因。我完全意识到,实际上typedef
,如果完全使用函数指针,则s是通向此处的方法。)
C(和C ++)声明的一般规则是:如果将声明键入为表达式,它将具有声明的类型。
因此,您需要一个指向函数的指针,该指针返回指向返回void的函数的指针。
假设我们有一个指针,ptr
。如何void
摆脱呢?
解除引用ptr
,获取返回函数的指针,该指针指向返回void的函数:*ptr
调用函数,获取指向返回void的函数的指针: (*ptr)()
解引用该指针,使函数返回void: *(*ptr)()
调用该函数,使其无效: (*(*ptr)())()
现在,将其转换为声明:
void (*(*ptr)())();
PS:我知道其他人在此期间已回答(并且我已投票赞成)。但是我想展示到达申报表的一般过程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句