我不明白为什么我的花车的地址上升了16,当我的花车的大小是4.有人可以解释一下吗?
代码:
char* mychar = new char[SIZE];
float* myfloat = new float[SIZE];
for(int i = 0; i < SIZE; i++)
{
mychar[i] = 'A' + i;
myfloat[i] = 101 + i;
}
for(int i = 0; i < SIZE; i++)
{
cout << setw(12) << "new char @ <" << static_cast<void*>(mychar) + sizeof(char)*i << ">=<" << mychar[i] << ">"
<< setw(14) << " new float @ <" << myfloat + sizeof(float)*i << ">=<" << myfloat[i] << ">\n";
}
cout<< "Size of float: " << sizeof(float) << endl << "Size of char: " << sizeof(char);
输出:
new char @ <0x800102e8>=<A> new float @ <0x800102f8>=<101>
new char @ <0x800102e9>=<B> new float @ <0x80010308>=<102>
new char @ <0x800102ea>=<C> new float @ <0x80010318>=<103>
new char @ <0x800102eb>=<D> new float @ <0x80010328>=<104>
Size of float: 4
Size of char: 1
答案 0 :(得分:6)
请注意myfloat
是float*
。这意味着如果你写一个像
myfloat + n
结果将指向float
的{{1}}指针,n
位于float
的数组中,其地址从myfloat
开始。换句话说,在这里添加n
将自动将指针递增n * sizeof(float)
个字节,因为指针添加意识到对象的大小。
因此,如果你写
myfloat + n * sizeof(float)
你没有跳过n * sizeof(float)
字节,而是n * sizeof(float) * sizeof(float)
字节,恰好是16n字节。
希望这有帮助!