关于sizeof运算符

昨天去Virtuos做笔试,虽然做了很多的准备,但是感觉还是不尽如人意。其中,关于sizeof的操作,让我觉得有些恼火。回来后,又在网上找了下相关的帖子,总算有了点系统的了解。

sizeof主要用于两个方面的运算:

Part 1.用于数据类型

格式为

sizeof(type)
此处,必须用括号。
Part 2.用于变量
格式为
sizeof(var_name) 或者 sizeof var_name
此处,括号可用可不用,不过一般来说,程序员都习惯加括号。(我也喜欢加括号^_^)。
在使用sizeof时,有以下一些地方需要注意:
1、在使用sizeof对结构体进行运算时,要考虑到位对齐,而不是单纯的将结构体中的变量进行相加处理。如:
Struct MyStruct
{
       double a;
       int        b;
       char     c;
}
在上面代码中,对MyStruct进行sizeof()运算,结果为16,而不是8+4+1 = 13。
2、函数的形参均为指针,故,在对形参进行sizeof()运算时,得到的是指针大小。依编译器和平台不同而不同,在vc中一般为4。如:
int func(char s[4])
{
      cout << sizeof(s) << endls;//函数的参数为指针,所以求的是指针大小
}
sizeof("1234") = 4 //因为func返回的是int,所以sizeof("1234") = sizeof(int)
3、对类进行sizeof()运算。
一般对类进行sizeof()运算,和情况1相同。需要注意的是:
a、空类为的sizeof()运算为1。
b、类中的函数和Static成员变量均不计算在内。因为它们都属于stack allocation。
c、类中有虚函数的话,应该在计算成员sizeof()之和后,再加上sizeof(v表)。在VC中,sizeof(V表) = 4。
其他的就不清楚了~
4、参数为数组或指针。
此类情况,数组会返回数组所占空间,指针则是直接返回值。如:
int a[50]; //sizeof(a)=4*50=200; 求数组所占的空间大小
int *a=new int[50];// sizeof(a)=4; a为一个指针,sizeof(a)是求指针的大小,在32位系统中,当然是占4个字节。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值