什么将输出简单的C函数,为什么?

时间:2013-12-12 12:08:57

标签: c operand

我需要理解和复制(用另一种语言) 跟随功能的逻辑(C代码) 我真的不明白,它在做什么

double __thiscall sub_1(int this) {

    return * (double *) (this + 12);

}

它已编译好,但在运行.exe文件时崩溃

我根本不擅长C,也找不到, 这组操作数的实际操作是什么 *(双*) 这不是解引用,因为没有声明指针。

无论如何,任何人都可以告诉我 - 功能的输出

对于sub_1(2)以及为什么?

1 个答案:

答案 0 :(得分:3)

要使此代码起作用,int this必须是包含地址整数值的变量。从该地址开始,必须有一个有效的双重分配,具有12字节的偏移量。代码返回该double的内容。

因此,如果函数被调用为sub_1(0x00000010),那么必须在address 0x0000001C分配一个双变量。如果没有,该程序将调用未定义的行为,并且很可能会崩溃&燃烧。

请注意,使用int传递地址没有任何意义。更好的选择是double*,或者至少uint32_t,它不是有符号整数类型。如果地址太大而无法容纳在int中,则此代码将失败。