这段C语言代码是用来干什么的?
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
特别是我对主题有些困惑。
这段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;
当您想将某些值
转换为特定的类型
时。
还要记住,定义函数指针的方式如下:
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)();
code
强制转换为返回值为int
的函数指针:http://cdecl.ridiculousfish.com/?q=%28int+%28*%29%28%29%29code。 - WhozCraig