sizeof的用法细节

sizeof的用法
sizeof的结果是预编译时候的结果。也就是说编译时候就知道了他的结果。这样就可以用sizeof来定义数组了

返回值是size_t  也就是typedef unsigned int
sizeof 的操作对象可以是一个变量也可以是一个表达式,可以使一个对象或者类型名

当操作对象是变量或者变量类型时候
1、如果是整形,或者char型的则直接输出他的大小。
2、如果是指针
  int i=0;
  char ch[3]={'a','b','c'};
  char *p=ch;
  cout<<sizeof(p);  //输出4,即指针p的长度,一个指针在32位机平台是4个字节
  cout<<sizeof(ch);    //输出3,也就是数组所占的内存长度。
  cout<<sizeof(*p);    //c++ primer上面说sizeof不会对指针进行解引用操作,书上说p可以是一个无效的地址。
                                  //但是这里却可以解引用p,结果输出的是1,也就是p所指向的对象内存的大小。
                                  //因为p指向的ch的首地址,所以输出第一个元素的大小,一个char的大小。
  cout<<sizeof(ch)/sizeof(*ch);  //用这种方法可以输出数组的元素个数,也就是数组的长度。
  cout<<sizeof(i++);   //输出4,也就是i类型的大小。整形的数字,所以是4个字节。但是要注意,这里并不对i进行自加操作。

  cout<<sizeof(i==0); //输出1,i==0结果为真,这里输出的是一个bool型的大小。
                                   //虽然对i不能进行自加,自减操作,但是对于判断性表达式还是会进行判断的,
                                   //也就是不会对变量所占的内存单元进行修改,因为sizeof是在编译阶段,而不是运行阶段执行的。

sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

注意,如果对结构或者类进行sizeof操作时候,不要忽略了内存对齐和虚函数表。

注意BOOL和bool的不同,因为BOOL在windows平台下是微软的一个类型定义,typedef int BOOL;所以是4
但是bool是标准c++类型,所以是1个字节。

 

sizeof也可以用函数名作参数

short fun();

sizeof(fun);  返回值就是2,即short的长度

 

另外sizeof不能计算动态申请的数组的大小和外部数组的大小

也不能用于计算不完全类型的大小,

 

如果一个结构体重含有枚举变量,那么sizeof运算对枚举变量运算没用,也就是不占空间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值