如果编写了以下代码来学习一些有关指针和指针算术的知识,这意味着从偏移量到偏移量以从结构中读取某些内容。 我有以下代码
DWORD * x = (DWORD*)((UINT)ptr1 + sizeof(int) + sizeof(float));
float f = *(float*)x;
此代码可以正常工作。但是,为了使它正常工作,我付出了很多努力,因为一开始我并没有将ptr1
强制转换为UINT
,因此得到了我想要的另一个地址。
现在可以使用了。但是有人可以向我解释为什么我不能直接向类型为sizeof...
的{{1}}添加偏移量(ptr1
)吗?
DWORD *
答案 0 :(得分:1)
在n
指针上添加数字T *
将使指针移动sizeof(T)*n
个字节(而不是n
个字节)。
以您的示例为例,如果我们假设sizeof(int)
和sizeof(DWORD)
均为4,则将sizeof(int)
添加到ptr1
会将ptr1
移动16个字节(而不是4,这可能是您想要的)。
答案 1 :(得分:0)
从偏移量到偏移量以从结构中读取内容。
您不能那样做。指针不是这样工作的。您不应将它们视为数字,地址;那种疯狂的谎言。 C ++是一种抽象,您只能有一个指向对象或对象数组的指针。一旦开始使用它来在对象之间导航 ,就迷路了。为与填充,对齐,混叠,优化有关的UB怪异做准备...