数组元素的地址c ++

时间:2013-01-27 22:43:20

标签: c++

  

可能重复:
  Pointer arithmetics in C++ uses sizeof(type) incremention instead of byte incremention?

试图找到答案但不能。 我有以下c ++代码:

struct A {
    uint16_t a;
    uint16_t b;
    uint16_t c;
}

int main() {
    uint16_t * B = new uint16_t[5000];
    for (int i=0;i<5000;i++)
        B[i] = i;

    uint16_t * D = &B[500]+sizeof(A);
}

问题是:为什么* D = 512之后呢?当我调试sizeof(A)= 6时应该如此。然而我添加了B [500]的内存地址A的大小它增加了12而不是6。 我正在处理内存地址仍然存在乘法,我无法弄清楚为什么会这样。

请告知。

谢谢!

1 个答案:

答案 0 :(得分:4)

如果sizeof(A)确实是6,那就是编译错误。

&B[500] + 6 == &B[506]

因此*D应该是506。而且是在我编译时

#include <iostream>
#include <cstdint>

struct A {
    uint16_t a;
    uint16_t b;
    uint16_t c;
};

int main() {
    uint16_t * B = new uint16_t[5000];
    for (int i=0;i<5000;i++)
        B[i] = i;

    uint16_t * D = &B[500]+sizeof(A);
    std::cout << (*D) << std::endl;
    return 0;
}

使用g ++ - 4.7.1或clang ++ - 3.1。