我需要理解和复制(用另一种语言) 以下功能的逻辑(C代码) 我真的不明白,它在做什么
double __thiscall sub_1(int this) {
return * (double *) (this + 12);
}
编译正常,但运行.exe文件时崩溃
我对 C 一点都不强,也找不到, 这组操作数的实际操作是什么 * (双倍的 *) 这不是取消引用,因为没有声明指针。
无论如何,谁能告诉我 - 函数的输出是什么
对于 sub_1(2),为什么?
最佳答案
要使此代码正常工作,int this
必须是一个保存地址整数值的变量。从该地址开始,必须有一个有效的 double 分配,具有 12 字节的偏移量。该代码返回该 double 值的内容。
因此,如果函数被调用为 sub_1(0x00000010)
,则必须在 address 0x0000001C
处分配一个 double 变量。否则,程序会调用未定义的行为,很可能会崩溃并烧毁。
请注意,使用 int
传递地址没有任何意义。更好的选择是 double*
,或者至少是 uint32_t
,它不是有符号整数类型。如果地址太大而无法容纳在 int 中,则此代码将失败。
关于c - 简单 C 函数的输出是什么,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20543139/