sizeof操作符
sizeof
操作符返回的是表达式或者类型名的大小,单位是字节(bytes),是右结合的。
sizeof
的结果是一个常量表达式,类型是size_t
。有两种形式:
- sizeof (type)
- sizeof expr
记住,sizeof
不寻常之处在于,它不会去解析操作数(not evaluate its operand)。
Sales_data data, *p;
sizeof(Sales_data); // 容纳一个Sales_data类型对象的大小
sizeof data; // 结果和上面相等
sizeof p; // 一个指针大小
sizeof *p; // p指向对象的大小;即sizeof(Sales_data)
我们来看看sizeof *p
。首先,因为sizeof
是右结合的,优先级和*
相等;因此等价于sizeof (*p)
。
一些值得注意的地方总结:
sizeof char
的大小始终是1sizeof
一个引用即该引用对象类型的大小sizeof
一个指针返回容纳该指针的大小sizeof
一个指针的解引用,返回指针指向对象类型的大小;指针可以不是合法的sizeof
一个数组,返回整个数组的大小;注意,这时数组不会转为指针sizeof
一个字符串或者vector,返回的是其固定部分大小。
string s = "hello world";
cout << sizeof(s); // 返回的是string这种数据结构的size,不是其长度