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