#include <iostream>
#include <vector>
int main()
{
using std::cout;
using std::endl;
int x[10], *p = x;
cout << sizeof(x) / sizeof(*x) << endl;
cout << sizeof(p) << endl;
cout << sizeof(*p) << endl;
cout << sizeof(p) / sizeof(*p) << endl;
std::vector<int> v1;
cout << sizeof(v1) << endl;
v1.resize(10, 0);
cout << sizeof(v1) << endl;
v1.resize(100, 0);
cout << sizeof(v1) << endl;
v1.resize(2, 0);
cout << sizeof(v1) << endl;
getchar();
}
输出:
10
4
4
1
16
16
16
16
可以看到,对vector调用sizeof返回的是个固定值,《C++ Primer》中描述,对string对象或vector对象调用sizeof运算只返回改类型固定部分的大小。
sizeof(*p)可以这么理解,由于sizeof满足右结合律,且'*'的优先级与sizeof运算符一样,因此sizeof是对指针p所指对象运算。
sizeof(p)即求指针的大小。