向指针添加偏移量而不转换为UINT

时间:2018-12-31 12:35:48

标签: c++ pointers

如果编写了以下代码来学习一些有关指针和指针算术的知识,这意味着从偏移量到偏移量以从结构中读取某些内容。 我有以下代码

    DWORD * x = (DWORD*)((UINT)ptr1 + sizeof(int) + sizeof(float));
    float f = *(float*)x;

此代码可以正常工作。但是,为了使它正常工作,我付出了很多努力,因为一开始我并没有将ptr1强制转换为UINT,因此得到了我想要的另一个地址。

现在可以使用了。但是有人可以向我解释为什么我不能直接向类型为sizeof...的{​​{1}}添加偏移量(ptr1)吗?

DWORD *

2 个答案:

答案 0 :(得分:1)

n指针上添加数字T *将使指针移动sizeof(T)*n个字节(而不是n个字节)。

以您的示例为例,如果我们假设sizeof(int)sizeof(DWORD)均为4,则将sizeof(int)添加到ptr1会将ptr1移动16个字节(而不是4,这可能是您想要的)。

答案 1 :(得分:0)

  

从偏移量到偏移量以从结构中读取内容。

您不能那样做。指针不是这样工作的。您不应将它们视为数字,地址;那种疯狂的谎言。 C ++是一种抽象,您只能有一个指向对象或对象数组的指针。一旦开始使用它来在对象之间导航 ,就迷路了。为与填充,对齐,混叠,优化有关的UB怪异做准备...