我是一个特尔斐人,在这里喝醉了,试图弄清楚这个C ++代码在这里有什么但不知道.. thanx
char sc[] = "\x31.....";
int main(int argc, char **argv)
{
int (*f)();
f = (int (*)())sc;
(int)(*f)();
}
" SC"是一个char
答案 0 :(得分:10)
让我们一次走一行:
int (*f)();
这声明了一个名为f
的变量,它是一个指向函数的指针,该函数不带参数并返回int
。
f = (int (*)())sc;
此处带括号的部分是类型int (*)()
,指向函数的指针类型,不带参数并返回int
。这是一个类型转换,将sc
置于该类型的函数中,然后将其分配给f
。由于sc
似乎是char
数组,这意味着“将数组sc
中的字节视为不带参数且返回int
的函数的代码。”这将导致C ++规范中的未定义行为,并且取决于您的系统,该函数可能会起作用,或者由于在包含代码的页面上设置了无执行位而可能会崩溃。
(int)(*f)();
这是不必要的复杂。 (int)
是表达式(*f)()
的类型转换。这里,(*f)
是f
指向的函数,()
调用它。因此,这意味着“调用f
指向的函数,然后将结果转换为int
。”当然,f
已经返回int
,因此演员阵容毫无意义。正如我上面提到的,这会导致未定义的行为。
希望这有帮助!