这个c代码做了什么?
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
特别是我对subj感到困惑。
答案 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)();