sizeof()运算符

作为自己的第一篇博客,完全是对于自己的一个反思!关于sizeof运算符的理解与计算,吃了很多亏,不想在一个问题上继续错误下去。
     废话不多说开始写有关sizeof 的所有内容。
     定义: sizeof操作符以字节形式给出了其操作数的存储大小。返回一个对象或者类型所占的内存字节数
     1、用于数据类型和变量
(1):char* s = "0123456789";
              sizeof(s) = 4    //s是指向字符串常量的字符指针,为一个长整型
              sizeof(*s) = 1   //*s是第一个字符
(2):char s[] = "0123456789";
              sizeof(s) = 11   //s是数组,计算到\0位置,因此是10+1
(3):char s[100] = "0123456789";
              sizeof(s) = 100  //s表示在内存中的大小 100×1
(4):int s[100] = "0123456789"; int *s;
               sizeof(s) = 400   //s表示在内存中的大小 100×4
                sizeof(*s)= 4  
     2、用于结构体
(1):struct S {};     
              sizeof(S); // 结果为1,而不是0
        (2):struct S1{
               char c; //偏移量为0,占1个字节
               int i;  //偏移量为4,占4个字节
             };
              sizeof(S1)= 8
(3):struct S2{
      char c1;//偏移量为0,占1个字节
               S1 s;   //偏移量为4,占8个字节,对于结构体类型用其最宽偏移量
               char c2;//偏移量为12,占1个字节
             };
     sizeof(S2)= 12 + 1 + 3 = 16
     3、sizeof与strlen的区别
    char q[]="abc";
            sizeof(q) = 4, sizeof(p) = 3
            sizeof是运算符,在编译时便已处理,而strlen为函数,运行时才处理。并由上可以看出sizeof计算所有占用内存字节数的长度要计算‘\0’,而strlen只是计算字符串的长度并以‘\0’结束计算。
      

最后了解一下pack指令,它是用来调整结构体对齐方式的。基本用法如下:
      #pragma pack(push) // 将当前pack设置压栈保存
      #pragma pack(2) // 必须在结构体定义之前使用
      。。。
      #pragma pack(pop) // 恢复先前的pack设置
      偏移值以和 结构体成员 相比的最小值为准           

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值