数组元素 c++ 的地址

Address of array elements c++

本文关键字:地址 c++ 数组元素      更新时间:2023-10-16

可能的重复项:
C++中的指针算术使用大小(类型)增量而不是字节增量?

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

请指教。

谢谢!

如果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。