sizeof 操作符
sizeof 操作符的作用是返回一个对象或类型名的长度,返回值的类型为size_t,长度的单位是字节。size_t 表达式的结果是编译时常量,该操作符有以下三种语法形式:
sizeof (type name);
sizeof (expr);
sizeof expr;
将 sizeof 应用在表达式 expr 上,将获得该表达式的结果的类型长度:
Sales_item data, *p;
sizeof(Sales_item); //存储Sales_item类型对象所占的空间大小
sizeof data; //data的类型大小,即sizeof(Sales_item)
sizeof p; //指针所占的空间大小
sizeof *p; //p所指类型的空间大小即sizeof(Sales_item)
将 sizeof 用于 expr 时, 并没有计算表达式 expr 的值。 特别是在 sizeof,*p 中,指针 p 可以持有一个无效地址,因为不需要对 p 做解引用操作。
使用 sizeof 的结果部分地依赖所涉及的类型:
对 char 类型或值为 char 类型的表达式做 sizeof 操作保证得 1。
对引用类型做 sizeof 操作将返回存放此引用类型对象所需的内在空间大小。
对指针做 sizeof 操作将返回存放指针所需的内在大小;注意,如果要获取该指针所指向对象的大小,则必须对指针进行引用。
对数组做 sizeof 操作等效于将对其元素类型做 sizeof 操作的结果乘上数组元素的个数。
因为 sizeof 返回整个数组在内存中的存储长度,所以用 sizeof 数组的结果除以 sizeof 其元素类型的结果,即可求出数组元素的个数:
// sizeof(ia)/sizeof(*ia) returns the number of elements in ia
int sz = sizeof(ia)/sizeof(*ia);