向量的存储位置不连续 我在CuBunTU 20.04上使用C++,运行下面的代码: vector<int> v(10,2); cout<<sizeof(int)<<"\n"; for (int i = 0; i < 10; ++i) cout<<&(v[i])<<"\n";

向量的存储位置不连续 我在CuBunTU 20.04上使用C++,运行下面的代码: vector<int> v(10,2); cout<<sizeof(int)<<"\n"; for (int i = 0; i < 10; ++i) cout<<&(v[i])<<"\n";,c++,vector,memory-management,stl,c++17,C++,Vector,Memory Management,Stl,C++17,如果向量在内存中按块大小4字节的顺序存储数据,那么为什么0x55967f666f18之后是0x55967f666f1c而不是0x55967f666f22?您考虑的是十进制10进制数字系统,但指针是以十六进制16进制打印的。十六进制是计算中一个相当重要的系统 十六进制中有以下数字: 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 地址正确且连续。如果要在Base 10中检查它们,请使用以下转换器: 十进制的两个地址是: 94104870874904 94104870874908你知

如果向量在内存中按块大小4字节的顺序存储数据,那么为什么0x55967f666f18之后是0x55967f666f1c而不是0x55967f666f22?

您考虑的是十进制10进制数字系统,但指针是以十六进制16进制打印的。十六进制是计算中一个相当重要的系统

十六进制中有以下数字:

0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F

地址正确且连续。如果要在Base 10中检查它们,请使用以下转换器:

十进制的两个地址是:

94104870874904
94104870874908

你知道十六进制数字是如何工作的吗?例如,9之后是什么?因为0x55967f666f18<0x55967f666f1c<0x55967f666f22?更简单地说,忽略前导数字0x1c<0x22——即使您不知道十六进制,这似乎不是从1<2开始的吗?顺便说一句,如果你不懂十六进制,最好问问为什么c会显示为一个数字,因为这似乎比按顺序排列数字更基本。0x55967f666f1c-0x55967f666f18==4==sizeofint在你的机器上我知道了。。。我不太熟悉十六进制。。。好的,谢谢你回答@cegien
4
0x55967f666f10
0x55967f666f14
0x55967f666f18
0x55967f666f1c
0x55967f666f20
0x55967f666f24
0x55967f666f28
0x55967f666f2c
0x55967f666f30
0x55967f666f34