sizeof运算符

一、Sizeof的说明

sizeofC/C++语言的一种单目操作符,它不是函数。sizeof操作符返回值为其操作数的存储大小,用字节数表示。操作数可以是一个表达式或括在括号内的类型名。 sizeof的结果是size_t,它被定义为unsigned int类型。该类型保证容纳显示所建立的最大对象的字节大小。

需牢记sizeof的计算发生在编译时刻,所以它可以被当作常量表达式使用,且会忽略其括号内的各种运算。

二、Sizeof的使用

 1、sizeof的使用形式:sizeof(var_name)或者sizeof var_name 

 2、数据类型必须用括号括起来:sizeof(type)

变量、对象可以不用括号括住:sizeof a,但若是类型必须用括号。

 3、sizeof可以对表达式求值:sizeof(2.5+3.14),实际是sizeof(double)

 4、sizeof可以对函数调用求值,实际上是对返回值类型求值

 int func(char s[5]);
 {
 cout<<endl;
 return 1;
 }
sizeof(func(“1234”))=4 //因为func的返回类型为int,所以相当于求sizeof(int)=4,sizeof(s)=4

 5、以下情况不能用sizeof进行求值

1)不能对函数名求值

2)不能对不确定返回值的类型求值,如void

3)位域成员不可以使用sizeof求值

4)不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。 

  一般,在32位编译器下:

       sizeof(char):1     

     sizeof(short):2

          sizeof(int):4

     sizeof(long):4

       sizeof(float):4

       sizeof(double):8

       sizeof(long long):8

     sizeof(p):4,(p为指针)

32位系统下指针的sizeof是4字节,64位下是8字节

6.指针与静态数组的sizeof操作
      1) 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。
        注意: int *p; sizeof(p)=4;(32位系统下始终不变)sizeof(*p)相当于sizeof(int),随着数据类型的改变而改变;      
      2) 对于静态数组,sizeof可直接计算数组大小;当数组动态分配时,int *a = new int[10]; sizeof = 4。
         例: int a[10];char b[]="hello";
                sizeof(a)等于4*10=40;
                sizeof(b)等于6;
          
注意 数组做形参时,数组名称当作指针使用!!
               void  fun(char p[]) {sizeof(p)等于4}
如下程序:
#include <stdio.h>
void func(char p[])
{
    printf("in func args,p[] size %d\n", sizeof(p));
}
int main()
{
    int *p;
    int a[10];
    char b[] = "hello";

    printf("*p size %d\n", sizeof(p));
    printf("a[10] size %d\n", sizeof(a));
    printf("\"hello\" size %d\n", sizeof(b));
    func(b);
    return 0;
}
输出结果: *p size 4
               a[10] size 40
               "hello" size 6
               in func args,p[] size 4
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值