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

标签 c operand

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

相关文章:

c - 检测到堆栈崩溃 - 已中止(核心已转储)

c - 使用 `int x = x;` 表达式(C 语言)可能是什么情况?

c# - 如何在文本框为空时输入默认值

c - 需要左值作为赋值的左操作数。这意味着什么?

c - 基本问题 : C function to return pointer to malloc'ed struct

花括号在 C 语言的正则表达式中不起作用

php - CakePHP 不支持的操作数

mysql - 错误 1241 操作数应包含 2 列

PHP 不支持的操作数类型

c - 在没有内存泄漏的情况下对 char* 进行子字符串化的正确方法