问题描述
以下语句在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