0

可能重复:
C++ 中的指针算法使用 sizeof(type) 增量而不是字节增量?

试图找到答案,但找不到。我有以下 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。我正在使用内存地址仍然存在乘法,我无法弄清楚为什么会这样。

请指教。

谢谢!

4

1 回答 1

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。

于 2013-01-27T22:50:20.563 回答