((dword *) v16 + 6) 是指 v16 中的 6 个字节,还是 v16 中的 6 个双字?

问题描述 投票:0回答:1

在 C++ 中,当我看到像 ((dword *) v16 + 6) 这样的位置时,这是否意味着从 v16 移动 6 个字节并作为双字返回,或者从 v16 移动 6 个双字?

我正在尝试阅读一些伪反编译代码并映射内存结构,但由于这是两个非常不同的位置,我想填补我对内存结构知识的空白。

c++ pointers memory
1个回答
0
投票

为了希望有助于理解其含义,我将其分成几部分

(dword *)v16
v16
的值视为内存中的地址,并将其转换为指向
dword
的指针。

((dword *) v16 + 6)
假设
(dword *)v16
给出的地址指向(至少)七个
dwords
数组的第一个元素,并给出一个指针,其值是第 7 个元素的地址(因为 C++ 中的数组索引)从零开始,数组中的第一个元素的索引为零)。

所以,不,添加

6
并不会移动 6 个字节。它移动 6 个
dword
dword
不是 C++ 中的标准类型,但在使用/定义为类型时,通常由多个字节表示)。

这与 C++ 中指针算术的工作方式一致(在向指针添加整数值时会考虑所指向的大小 - 在本例中为

dword
)。

© www.soinside.com 2019 - 2024. All rights reserved.