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,也要参与比较。

 

  

posted @ 2016-09-11 12:58  lihuiupupup  阅读(276)  评论(2编辑  收藏  举报