【发布时间】:2020-09-26 04:14:41
【问题描述】:
我在 Kubuntu 20.04 上使用 C++ 并运行以下代码:
vector<int> v(10,2);
cout<<sizeof(int)<<"\n";
for (int i = 0; i < 10; ++i)
cout<<&(v[i])<<"\n";
输出是:
4
0x55967f666f10
0x55967f666f14
0x55967f666f18
0x55967f666f1c
0x55967f666f20
0x55967f666f24
0x55967f666f28
0x55967f666f2c
0x55967f666f30
0x55967f666f34
如果向量在内存中顺序存储数据(如上面4字节的块大小),那么为什么在“0x55967f666f18”之后是“0x55967f666f1c”而不是“0x55967f666f22” ”?
【问题讨论】:
-
你知道十六进制数是如何工作的吗?例如,9 之后会发生什么?
-
因为
0x55967f666f180x55967f666f1c 0x55967f666f22?更简单(忽略前导数字)0x1c0x22 -- 即使你不知道十六进制,这似乎不是从1 < 2开始的吗? (顺便说一句,如果您不知道十六进制,最好问一下为什么c显示为数字,因为这似乎比按顺序排列数字更基本。) -
(0x55967f666f1c - 0x55967f666f18) == 4 == sizeof(int) (on your machine) -
哦……我明白了……我对十六进制不太熟悉……谢谢@cegien 的回答
标签: c++ vector memory-management stl c++17