微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++加上额外的圆括号

如何解决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 举报,一经查实,本站将立刻删除。