可能重复:
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。 我正在处理内存地址仍然存在乘法,我无法弄清楚为什么会这样。
请告知。
谢谢!
答案 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。