空括号中的星号代表什么意思?

3

这段C语言代码是用来干什么的?

{
    int (*func)();
    func = (int (*)()) code;
    (int)(*func)();
}

特别是我对主题有些困惑。


请提供一个 MCVEsubj 是什么? - Harald
code 强制转换为返回值为 int 的函数指针:http://cdecl.ridiculousfish.com/?q=%28int+%28*%29%28%29%29code。 - WhozCraig
打开你的链接时出现“错误请求”。 - lucidbrot
1
@lucidbrot 不知道那个链接怎么了。不过现在我通常使用cdecl.org,可以看看这里:https://cdecl.org/?q=int+%28*f%29%28%29。 - WhozCraig
3个回答

7

这是一个函数指针的类型转换。

序列 int (*)() 是一个函数指针,它接受不定数量的参数,并返回一个 int 类型。将其用括号包裹,像这样 (int (*)()),与表达式组合时,就是对表达式结果进行类型转换。

您展示的代码,带有注释:

// Declare a variable `func` which is a pointer to a function
int (*func)();

// Cast the result of the expression `code` and assign it to the variable `func`
func = (int (*)()) code;

// Use the variable `func` to call the code, cast the result to `int` (redundant)
// The returned value is also discarded
(int)(*func)();

3
这个函数调用将会丢弃返回值。 - haccks

4

记得进行类型转换,我们使用以下方式:

(type_to_cast) value;

当您想将某些转换为特定的类型时。

还要记住,定义函数指针的方式如下:

return_type (*pointer_name) (data_types_of_parameters);

函数指针的类型是

return_type (*) (data_types_of_parameters)

最后,您可以通过指针调用一个函数。
(*func_pointer)(arguments);

因此,考虑到这4点,您会发现您的C代码:

首先定义了一个函数指针func

其次,将code强制转换为函数指针,并将其值分配给func

第三,调用由func指向的函数,并将返回的值强制转换为int


0
  • int (*func)();声明func为一个指向函数的指针,该函数接受任意数量的参数并返回int

  • 在语句func = (int (*)()) code;中,将强制转换应用于code,然后将其分配给函数指针func

  • (int)(*func)();没有太多意义。不需要进行强制转换,并且它会丢弃返回值。调用应该像这样简单:

    int var = func();
    

    或者

    int var = (*func)();
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接