C ++,这段代码说了什么?

时间:2014-08-26 22:19:42

标签: c++ visual-c++

我是一个特尔斐人,在这里喝醉了,试图弄清楚这个C ++代码在这里有什么但不知道.. thanx

char sc[] = "\x31.....";


int main(int argc, char **argv)
{
    int (*f)();
    f = (int (*)())sc;
    (int)(*f)();
}

" SC"是一个char

1 个答案:

答案 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,因此演员阵容毫无意义。正如我上面提到的,这会导致未定义的行为。

希望这有帮助!