这段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)();