c语言sizeof理解

1、基本数据类型 char :1     short:2   int 4    long 4   long long :8    float:4    double :8字节。

2、数组:对应的基本数据类型的sizeof值*长度 例如 int arr[20] ; sizeof(arr) 的值就是 80。

3、结构体类型:

A:

结构体类型的sizeof的返回值不是将内部的值简单的相加,而是根据内部最大的数据类型分配地址空间的 ,

以最大数据类型所占字节为基本单位增加空间。且一定是最大值的整数倍。举例如下

  struct test {

    int num;

    char ch;

    double dou;

  }te;

则sizeof(te)的值不是13而是16,只是为什么了 ,我们来分析一下,就如上面所说最大类型为double,他的值

为8,16真好是他的2倍,以为一个double占了8个字节,就还剩下8个字节,int 占4个 char 占1个 所以说其实还有

3个字节根本就没用,但这就结构体分配内存的规则。

B:

现在我们将在结构体内部添加一个long类型,看看结果如何

  struct test {

    int num;

    char ch;

    double dou;

    long l;

  }te;

此时sizeof(te)的值应该就是24字节,可以自己试试以为一个double 一个int 一个long就是16字节,还多一个char

则还要分配8个字节出来。

C:

另外如果如果结构体中存在数组类型,不影响上述配备,直接加上数组的大小 如下

  struct test {

    int num;

    char ch;

    double dou;

    long l;

    double d[3];

  }te;

此时sizeof(te) 的值为48,直接24+24。

D:

最后结构体中有结构体类型,不会一个结构体类型为最大类型值,而是内部结构体中的最大值和最大值类型比较,取最大的。

  struct test2 {

    struct test te;

    int i;

  }te2;

则sizeof(te2)的值为56 

补充 ,如int arr[3]是数组类型的int,也要参与比较。

永不止步步 发表于01-09 11:54 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308417个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号