我只是在乱搞并学习向量和结构,并且在某一点上,我尝试以字节为单位输出向量的大小.这是代码:
#include <iostream>
#include <vector>
struct Foo{
std::vector<int> a;
};
int main()
{
using std::cout; using std::endl;
Foo* f1 = new Foo;
f1->a.push_back(5);
cout << sizeof(f1->a) << endl;
cout << sizeof(f1->a[0]) << endl;
delete[] f1;
}
Run Code Online (Sandbox Code Playgroud)
输出是24和4.
显然第二行打印4,因为那是int的大小.但为什么另一个值24呢?向量是否占用24个字节的内存?谢谢!
考虑:
int* ptr = (int*)0xDEADBEEF;
cout << (void*)&*ptr;
Run Code Online (Sandbox Code Playgroud)
*如果它与一个立即使用&并且假设没有超载op&/ 在场,那么它是多么违法op*?
(这对解决过去的数组元素有一个特殊的影响&myArray[n],这个表达式明确相当于&*(myArray+n).这个Q&A解决了更广泛的情况,但我不觉得它真的满足了上面的问题.)
如果我写
int main(int argc, char *argv[])
{
int temp[50][3];
return &temp[argc] - &temp[0];
}
Run Code Online (Sandbox Code Playgroud)
并使用Visual C++编译它,我回来了:
009360D0 55 push ebp
009360D1 8B EC mov ebp,esp
009360D3 8B 45 08 mov eax,dword ptr [argc]
009360D6 8D 0C 40 lea ecx,[eax+eax*2]
009360D9 B8 AB AA AA 2A mov eax,2AAAAAABh
009360DE C1 E1 02 shl ecx,2
009360E1 F7 E9 imul ecx
009360E3 D1 FA sar edx,1
009360E5 8B C2 mov eax,edx
009360E7 C1 E8 1F shr eax,1Fh
009360EA 03 C2 add eax,edx
009360EC …Run Code Online (Sandbox Code Playgroud) c++ code-generation multiplication pointer-arithmetic visual-c++