如何解决C ++加上额外的圆括号
以下语句在C ++中起什么作用?
(*JImageGetResource)(jimage,location,val,size);
此说明摘自here。
解决方法
不涉及演员。 JImageGetResource
是一个指针,通过在其前面添加*
,它将是dereferenced。
通常,您会看到带有迭代器的示例。
在您的情况下,它是一个函数指针。因此,生成的代码将与resultingFunction(jimage,location,val,size)
相同。
在第1017行中:JImageGetResource = CAST_TO_FN_PTR(JImageGetResource_t,dll_lookup(handle,"JIMAGE_GetResource",path));
不,不是强制转换,因为左括号中的内容是无类型的。这是通常的函数调用。
左括号取消对指针JImageGetResource
的引用,并且获得的对象可以用4个参数调用。
将此声明考虑在内
static JImageGetResource_t JImageGetResource = NULL;
这意味着名称JImageGetResource
标识由JImageGetResource_t
初始化的类型NULL
的指针。
也是这个记录
JImageGetResource = CAST_TO_FN_PTR(JImageGetResource_t,path));
是自记录的,表示JImageGetResource
表示函数指针。
所以这个表达式语句
(*JImageGetResource)(jimage,size);
代表带有四个参数的函数调用。
此记录也可以这样写
JImageGetResource(jimage,size);
或编写更加混乱的代码(由于函数指示符隐式转换为指向函数的指针),甚至是:)
(***JImageGetResource)(jimage,size);
这是一个演示程序。
#include <iostream>
void hello( const char *s )
{
std::cout << "Hello " << s << '\n';
}
typedef void ( *hello_t )( const char * );
int main()
{
hello_t fp = NULL;
fp = hello;
fp( "Michael Munta" );
( *fp )( "Michael Munta" );
( ***fp )( "Michael Munta" );
return 0;
}
其输出为
Hello Michael Munta
Hello Michael Munta
Hello Michael Munta
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。