空括号中的星号是什么意思?

时间:2016-08-09 08:59:07

标签: c

这个c代码做了什么?

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

特别是我对subj感到困惑。

3 个答案:

答案 0 :(得分:5)

它是对函数指针的强制转换。

序列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)();

答案 1 :(得分:2)

请记住进行类型转换,我们使用以下内容:

(type_to_cast) value;

如果您想将某些value投射到某个type

还记得你将函数指针定义为

return_type (*pointer_name) (data_types_of_parameters);

函数指针的类型是

return_type (*) (data_types_of_parameters)

最后,您可以使用指针调用函数

(*func_pointer)(arguments);

所以,考虑到这四点,你会看到你的C代码:

首先定义一个功能指针func

第二次,将code转换为函数指针,并将其值赋给func

第三次,调用func指向的函数,并将重新调整的值转换为int

答案 2 :(得分:0)

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

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

  • (int)(*func)();没有多大意义。不需要强制转换,它会丢弃返回值。电话应该像

    一样
    int var = func();  
    

    int var = (*func)();