C-------sizeof运算符以及结构体大小计算






前言

sizeof怎么用?结构体的对齐规则怎么去理解?






一、sizeof的作用与用法

  1.sizeof是运算符,并非函数;

  2.作用:计算一种类型(int..数组..结构体..之类)的字节数,返回一个无符号长整型数;

  3.与strlen的区别:3.1.strlen算的是数组的实际长度,不包括'\0';

                               3. 2.strlen是在string.h中的函数,sizeof是运算符;

                               3.3.sizeof不能通过指针去计算它指向的内存块大小;

                              





二、代码示例





1.sizeof的使用(64位下)

#include <stdio.h>

#include <string.h>

int  main()

{

    //计算类型

    printf("64位--char-%ld\n",sizeof(char));//1

    printf("64位--int-%ld\n",sizeof(int));//4

    printf("64位--long-%ld\n",sizeof(long));//8

    printf("64位---short int-%ld\n",sizeof(short int));//2

    printf("64位置--float-%ld\n",sizeof(float));//4       

    //计算数组

    char str[]="woaini";//初始化为字符串数组,字符串后面会自动添加一个‘\0’;

     char spr[]={'a','b'};//

     int num_1[]={1,2,3};

     int num_2[5];

     printf("%ld--%ld--%ld--%ld\n",sizeof(str),sizeof(spr),sizeof(num_1),sizeof(num_2));  

}





2.结构体的对齐规则

用的是我自己的语言,所以可能不准确,但是我觉得能让人看的懂;

//计算结构体大小

    /*存在一种对齐规则:

    1.先找到结构体里面最大的类型;

    2.按照最大的类型长度为模板,按声明的顺序排列,能够放下的放在同一行,否则另起一行;

    3.结构体的大小=最大的类型*行数

    */

    struct class

    {

        int age;

        char bg;

        short int b;

        int a;

        float hight;

        long student_num;

    }jpf;

    /* 64位下!

      1.jpf这个结构体变量中long是最大的,长度为8,所以每一行的长度空间为8;

      2.按照申明顺序开始排列:

      第一个是int型,长度为4,小于8放进第一行,此时第一行还有4个字节的长度;

      第二个是char型长度为1,第一行还有4个字节可用,能放下,放入第一行,此时第一行还有3个字节长度;

      第三个是short int型,长度为2,第一行还有3个字节可用,能放下,放入第一行,此时第一行只有1字节了;

      第四个是int型,长度为4,第一行只有1个字节了,放不下,放到第二行,此时第二行还有4个字节可用;

      第五个是float型,长度为4,第二行还有4个字节,刚好,能放下!放入第二行,第二行用完;

      第六个是long型,另起一行,长度为8,刚好用完第三行

      3.所以jpf结构体=8*3=24*/






总结

以上就是我对sizeof的一些认识,以及对结构体对齐的解释,我也是没学多久,想着通过记录这样去积累,学习,一直在路上!欢迎大家跟我对话交流,一起学习进步!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值