zoukankan      html  css  js  c++  java
  • 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,也要参与比较。

      

  • 相关阅读:
    PAT 乙级 -- 1011 -- A+B和C
    PAT 乙级 -- 1010 -- 一元多项式求导
    PAT 乙级 -- 1008 -- 数组元素循环右移问题
    PAT 乙级 -- 1009 -- 说反话
    python3.6执行AES加密及解密方法
    Python3.6 AES加密 pycrypto‎ 更新为 pycrypto‎demo | TypeError: Object type <class 'str'> cannot be passed to C code
    windows下python3.6安装pycryto or crypto or pycryptodome与使用
    chkconfig命令
    centos下安装redis
    selenium--基础学习
  • 原文地址:https://www.cnblogs.com/lihuiupupup/p/5861536.html
Copyright © 2011-2022 走看看