visual C++,这段代码说明了什么
visual C++, What does this code says?
我是一个delphi的家伙,在这里喝得酩酊大醉,试图弄清楚这个C++代码是什么,但不知道。。乙醇
char sc[] = "x31.....";
int main(int argc, char **argv)
{
int (*f)();
f = (int (*)())sc;
(int)(*f)();
}
"sc"是字符
让我们一次走一行:
int (*f)();
这声明了一个名为f
的变量,该变量是指向不带参数并返回int
的函数的指针。
f = (int (*)())sc;
这里带括号的部分是类型int (*)()
,指向不带参数并返回int
的函数的指针的类型。这是一个类型转换,将sc
大小写为该类型的函数,然后将其分配给f
。由于sc
似乎是一个char
数组,这意味着"将数组sc
中的字节视为不带参数并返回int
的函数的代码。"这将导致C++规范中未定义的行为,根据您的系统,该函数可能会工作,也可能因包含代码的页面上未设置执行位而崩溃。
(int)(*f)();
这是不必要的复杂。CCD_ 11是表达式CCD_ 12的类型转换。这里,(*f)
是f
所指向的函数,()
调用它。因此,这意味着"调用f
所指向的功能,然后将结果强制转换为int
。"当然,f
已经返回了int
,所以强制转换没有意义。正如我上面提到的,这会导致未定义的行为。
希望这能有所帮助!
相关文章:
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 我不确定为什么代码没有运行,它在编译时抛出错误,说它无法找到 PrintArray()
- 错误:类没有名为"ThisW"的成员;你是说"这个"吗?但是代码没有说"ThisW",它已经说了"This"
- 该标准是否说明了例外和不同调用约定的共存
- 为什么我的代码说"Yes"什么时候应该说"No"?
- 为什么这段代码说 C::f 覆盖 A::f 而不是 B::f?
- 找出一个正方形逻辑中可能的网格数量,但代码不接受超过六个输入,它停止并说.exe停止工作
- Primer说错误,但代码在GCC上工作正常
- 我正在学习编程,我遇到了看和说序列.我尝试用c ++编写代码
- 为什么编译器在此代码中说不完整的类型错误
- 为什么编译器在此代码中说POW(N,K)含糊不清
- 为什么Visual Studio说如果我的程序中没有编写任何数据结构代码,我就会出现堆栈溢出?C++
- 简单地说出长代码行
- 加载库确切地说明了 #import 的作用
- 我的代码中的函数似乎没有运行,谁能说出原因?
- 为什么我的代码说109不是素数
- 一个很好的例子说明了如何使函数primitve param const导致编译器优化
- For 循环 - i 的值不是 0,即使代码说"int i = 0"。i = 大数字,为什么?如何解决?
- visual C++,这段代码说明了什么
- 尝试在 GMock 代码中使用 WithArg;错误说它不存在