sizeof操作符

来源:互联网 发布:微商订货系统源码 编辑:程序博客网 时间:2024/05/28 05:19

sizeof操作符的作用是返回一个对象或类型名的长度,返回值的类型为size_t,长度的单位是字节.sizeof表达式的结果是编译时常量,该操作符有以下三种语法形式:

sizeof (type name);
sizeof (expr);
sizeof expr;

将sizeof应用在表达式expr上,将获得该表达式的结果的类型长度:

Sales_item item,*p;
//three ways to obtain size required to hold an object of type Sales_item
sizeof(Sales_item); //size required to hold an object of type Sales_item
sizeof item;  //size of item's type,e.g.,sizeof(Sales_item)
sizeof *p;  //size of type to which p points,e.g.,sizeof(Sales_item)

将sizeof用于expr时,并没有计算表达式expr的值.特别是在sizeof *p中,指针p可以持有一个无效地址,因为不需要对p做解引用操作.

使用sizeof的结果部分地依赖所涉及的类型:

a.对char类型或值为char类型的表达式做sizeof操作保证得1.

b.对引用类做sizeof操作将返回存放此引用类型对象所需的内存空间大小.

c.对指针做sizeof操作将返回存放指针所需的内存大小;注意,如果要获取该指针所指向对象的大小,则必须对该指针进行解引用.

d.对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数.因为sizeof返回整个数组在内存中的存储长度,所以用sizeof数组的结果除以sizeof其元素类型的结果,即可求出数组元素的个数:

//sizeof(ia)/sizeof(*ia) returns the number of elements in ia
int sz=sizeof(ia)/sizeof(*ia);

习题 5.22  编写程序输出每种内置类型的长度

#include<iostream>
using namespace std;
int main()
{
 cout<<"type/t/t/t"<<"size"<<endl
  <<"bool/t/t/t"<<sizeof(bool)<<endl
  <<"char/t/t/t"<<sizeof(char)<<endl
  <<"signed char/t/t"<<sizeof(signed char)<<endl
  <<"unsigned char/t/t"<<sizeof(unsigned char)<<endl
  <<"wchar_t/t/t/t"<<sizeof(wchar_t)<<endl
  <<"short/t/t/t"<<sizeof(short)<<endl
  <<"signed short/t/t"<<sizeof(signed short)<<endl
  <<"unsigned short/t/t"<<sizeof(unsigned short)<<endl
  <<"int/t/t/t"<<sizeof(int)<<endl
  <<"signed int/t/t"<<sizeof(signed int)<<endl
  <<"unsigned int/t/t"<<sizeof(unsigned int)<<endl
  <<"long/t/t/t"<<sizeof(long)<<endl
  <<"signed long/t/t"<<sizeof(signed long)<<endl
  <<"unsigned long/t/t"<<sizeof(unsigned long)<<endl
  <<"float/t/t/t"<<sizeof(float)<<endl
  <<"double/t/t/t"<<sizeof(double)<<endl
  <<"long double/t/t"<<sizeof(long double)<<endl;
 return 0;
}

习题5.23 预测下列程序的输出,并解释你的理由.然后运行该程序,输出的结果和你预测的一样吗?如果不一样,为什么?

int x[10];int *p=x;
cout<<sizeof(x)/sizeof(*x)<<endl;
cout<<sizeof(p)/sizeof(*p)<<endl;

在表达式sizeof(x)中,x是数组名,该表达式的结果为数组x所占据的存储空间的字节数,为10个int型元素所占据的字节数.

表达式sizeof(*x)的结果是指针常量x所指向的对象(数组第一个int型元素)所占据的存储空间的字节数

表达式sizeof(p)的结果是指针变量p所占据的存储空间的字节数.

表达式sizeof(*p)的结果是指针变量p所指向的对象(一个int型数据)所占据的存储空间的字节数

各种数据类型在不同的系统中所占据的字节数不一定相同,因此在不同的系统中运行上述程序段得到的结果不一定相同.在Microsoft Visual C++.NET 2003系统中,一个int型数据占据4个字节,一个指针型数据也占据4个字节,因此运行上述程序得到的输出结果为:

10 

 1

原创粉丝点击