sizeof运算符返回一条表达式或一个类型所占的字节数.sizeof运算符的结果是一个size_t类型的值.
sizeof运算符满足右结合律.因此,表达式sizeof p等价于sizeof(\p). 这是因为sizeof满足右结合律且与*运算符的优先级相同.所以表达式会按照从右向左的顺序组合.
sizoef运算符并不实际求其运算对象的值.因此,sizeof运算可以对一个无效指针进行运算.
以下是各种内置数据类型在64位机器上所占空间大小:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19cout << "sizeof(int):" << sizeof(int) << endl; // 4
cout << "sizeof(float):" << sizeof(float) << endl; // 4
cout << "sizeof(double):" << sizeof(double) << endl;// 8
cout << "sizeof(char):" << sizeof(char) << endl; // 1
int *p = 0;
// 8, 指针本身所占内存空间的大小
cout << "sizeof(p):" << sizeof(p) << endl;
// 4, 指针指向的对象所占内存空间的大小
cout << "sizeof(*p):" << sizeof(*p) << endl;
p = new int{12};
// 8, 指针本身所占内存空间的大小
cout << "sizeof(p):" << sizeof(p) << endl;
// 4, 指针指向的对象所占内存空间的大小
cout << "sizeof(*p):" << sizeof(*p) << endl;sizeof运算符与数组
- 对数组执行sizeof运算得到整个数组所占空间的大小.sizeof运算不会把数组名转成指针来处理
- 可以利用sizeof运算符来求数组中元素个数.
1
2
3
4
5int arr[] = {1, 2, 3};
cout << "sizeof(arr):" << sizeof(arr) << endl; // 12(4x3)
int n = sizeof(arr) / sizeof(*arr);
cout << "n=" << n << endl; // 3,数组中元素个数对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间
1
2
3
4vector<int> arr{1, 3, 7, 3};
vector<int> brr(100, 0);
cout << "sizeof(arr):" << sizeof(arr) << endl; // 24
cout << "sizeof(brr):" << sizeof(brr) << endl; // 24