gpt4 book ai didi

c - 简单 C 函数的输出是什么,为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:57 25 4
gpt4 key购买 nike

我需要理解和复制(用另一种语言)以下功能的逻辑(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com