sizeof是c/c++中很有用的一个操作符,在编程中很多场景下十分必要,必要性表现在:
- 由于不同平台下内置类型的实际字节长度不一样,要确定当前内置类型的字节大小,用sizeof直接就可以获得结果;
- 对于自定义的数据类型,考虑到CPU位对齐影响,内部成员排序方式不同可能导致类型大小不一样,这时通过sizeof可以避免考虑成员顺序变化造成的影响;
- 可以通过sizeof获取数组大小(sizeof(arr) / sizeof(arr[0]))
总之,为了不考虑平台等因素影响数据类型大小,sizeof直接返回当前平台特定对象的字节数。
sizeof作用对象:
注:以下测试都在某特定windows机器上操作。
1. 内置类型:
sizeof(char); //=1 sizeof(short); //=2 sizeof(int); //=4 sizeof(long); //=4 sizeof(double); //=8 sizeof(long long); //=8 |
2. 自定义类型:
class ClassA { char c ; int i ; double d ; }; class ClassB { int i ; double d ; char c ; }; sizeof(ClassA); //= 4 + 4 + 8 = 16,要考虑位对齐 sizeof(ClassB); //= 8 + 8 + 8 = 24,要考虑位对齐 |
3. 指针类型:
void *p = NULL; sizeof(p); //=8,当前平台上所有具体类型指针大小,sizeof下都是一样 |
4. 数组类型:
short arr1[8]; short arr2[2][6]; sizeof(arr1); //= 2 * 8 = 16 sizeof(arr2); //= 2 * 2 * 6 = 24 |