c/c++语言sizeof的用法

Sizeof是C/C++中的关键字,它是一个运算符,其作用是取得一个数据类型{基本数据类型(不包括void)、用户自定义类型(结构体、类)、函数类型}或者数据对象的byte长度。

特性1:sizeof不能求得void类型的长度。

特性2:sizeof能求得void类型的指针的长度。对任何类型的指针变量进行sizeof运算其结果就是4。

特性3:sizeof能求得静态分配内存的数组的长度。

      Int a[10]; int n = sizeof(a);则结果为40;

      char ch[]=”abcde”;sizeof(ch);结果为6,注意字符串数组末尾有’\0’;

      void fun(int array[10])    {int n = sizeof(array);}   结果为4。不管形参是int的型数组,还是其他任何用户自定义类型的数组,这里的n都是4,原因是在函数参数传递时,数组被转化成指针了。

特性4:sizeof不能求得动态分配的内存的大小。int*a = new int[10];int n = sizeof(a);n等于4,因为a是指针,切记这里的a与特性3中的a并不一样!

特性5:sizeof不能对不完整的数组求长度!

file1.cpp中有如下的定义:int arrayA[10] = {1,2,3,4,5,6,7,8,9,10};int arrayB[10] = {11,12,13,14,15,16,17,18,19,20};

file2.cpp包含如下几个语句: externarrayA[];externarrayB[10];cout<<sizeof(arrayA)<<endl;/*编译出错!!*/cout<<sizeof(arrayB)<<endl;

sizeof(arrayA)试图求不完整数组的大小,声明:extern int arrayA[]只是告诉编译器arrayA是一个整型数组,但是并没告诉编译器它包含多少个元素,因此对file2.cpp中的sizeof来说它无法求出arrayA的大小,所以编译器干脆不让你通过编译。

特性6:当表达式作为sizeof的操作数时,它返回表达式的计算结果的类型大小,但是它不对表达式求值!

char ch = 1; int num=1; int n1 =sizeof(ch+num); int n2 = sizeof(ch =ch+num);//n1等于4,n2等于1,ch等于1

特性7:sizeof可以对函数调用求大小,并且求得的大小等于返回类型的大小,但是不执行函数体

特性8:sizeof求得的结构体(及其对象)的大小并不等于各个数据成员对象的大小之和!涉及字节对齐

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值