memset指针+偏移量

时间:2015-07-08 23:55:15

标签: c++ pointers memset

例如,我有:

pop

我想将 DWORD pointer = 0x123456; DWORD offset = 0xABC; 添加到指针,并将该指针所指向的地址处的值设置为offset。如何将1.0f指针和偏移量作为第一个参数?

2 个答案:

答案 0 :(得分:1)

DWORD与uint32_t相同。只需将它们与任何其他整数一起添加即可。

另外,在设置浮点数时(我假设你因为'1.0'之后的'f'而设置浮点数),我不会使用memset。只需将指针转换为浮点数,然后将其取消引用:

DWORD pointer = 0x123456;
DWORD offset = 0xABC;

pointer += offset;

float* float_pointer = reinterpret_cast<float*>(pointer);
*float_pointer = 1.0f;

答案 1 :(得分:0)

这可以是直接的指针算法,但我们首先要处理一些初步问题。

  1. 为什么您的pointer变量声明为DWORD?我们最终需要一个合适的指针类型。
  2. 如果您尝试设置浮点值,为什么要询问memsetmemset设置普通位模式;它对浮点数没什么好处。
  3. 我认为你的offset应该以字节为单位,而不是sizeof(float)
  4. 无论如何,计算你想要的指针可能是这样的:

    float *fp = (float *)(pointer + offset);
    

    [注意我在转换之前在parens中执行添加,以便获得字节偏移量。如果我改为写(float *)pointer + offset,它会被`sizeof(float)。[/ p>]所抵消

    一旦我们得到了浮动指针,我们就可以通常的方式将它指向的位置设置为1.0

    *fp = 1.0f;
    

    或者我们可以使用memset将其设置为0:

    memset(fp, 0, sizeof(float));