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

  • 本文关键字:是什么
  • 更新时间 :
  • 英文 :


这段c代码是做什么的?

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

转换为函数指针

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

记住要进行类型转换,我们使用以下命令:

(type_to_cast) value;

当你想将一些value转换为某个type时。

还要记住,函数指针定义为

return_type (*pointer_name) (data_types_of_parameters);
函数指针的类型是
return_type (*) (data_types_of_parameters)

最后,可以调用指针为

的函数
(*func_pointer)(arguments);
因此,记住这4点,您可以看到您的C代码:

第一个定义了一个函数指针func

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

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

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

  • 在语句func = (int (*)()) code;中,对code进行强制类型转换,然后将其赋值给函数指针func

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

    这样简单。
    int var = func();  
    

    int var = (*func)();
    

最新更新