C++ 将偏移量添加到指针而不强制转换到UINT

C++ 将偏移量添加到指针而不强制转换到UINT,c++,pointers,C++,Pointers,If编写了以下代码来学习指针和指针算法,这意味着从一个偏移量到另一个偏移量读取结构中的内容。 我有以下代码 DWORD * x = (DWORD*)((UINT)ptr1 + sizeof(int) + sizeof(float)); float f = *(float*)x; 这段代码正常工作。然而,为了让它正常工作,我做了很多努力,因为一开始我没有将ptr1转换为UINT,因此得到了我想要的不同地址 现在它起作用了。但是,有人能向我解释为什么我不能将偏移量(sizeof…)

If编写了以下代码来学习指针和指针算法,这意味着从一个偏移量到另一个偏移量读取结构中的内容。 我有以下代码

    DWORD * x = (DWORD*)((UINT)ptr1 + sizeof(int) + sizeof(float));
    float f = *(float*)x;
这段代码正常工作。然而,为了让它正常工作,我做了很多努力,因为一开始我没有将
ptr1
转换为
UINT
,因此得到了我想要的不同地址

现在它起作用了。但是,有人能向我解释为什么我不能将偏移量(
sizeof…
)直接添加到
ptr1
类型的
DWORD*

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

将数字
n
添加到
T*
指针将移动指针
sizeof(T)*n
字节(而不是
n
字节)

例如,如果我们假设
sizeof(int)
sizeof(DWORD)
都是4,那么将
sizeof(int)
添加到
ptr1
将移动
ptr1
16个字节(而不是您可能想要的4个字节)

从一个偏移量到另一个偏移量读取结构中的内容


你不能那样做。指针不是这样工作的。你不能把它们仅仅当作数字、地址;那样的话,疯狂就是谎言。C++是抽象,只能有指向对象或对象数组的指针。一旦你开始使用它在对象之间导航,你就输了。准备好与填充、对齐、别名、优化相关的UB怪异…

请添加更多上下文。我们应该猜出什么类型的<代码> PTR1?pTr1+n==(char)pTr1+siZeof(*pTr1)*n查找指针算术教程。但是用适当的C++强制转换。不应该强制转换为UTIT-它在64位代码中不够大。转换为
char*
。@πάνταῥεῖ 不用猜了。OP上写着“ptr1…属于DWORD*类型”,原因是数组:
intx[10];int*xp=&x[0];xp=xp+1xp
等于
&x[1]