zoukankan      html  css  js  c++  java
  • 2015.12.14 宏定义 枚举 动态内存分配

    宏定义 (#define)

      宏定义的意义和用途:(习惯上,都是“k”开头

                1.为了让一些数据有意义。

                

                2.类似于内联函数(使用简便)。

                

                3.输出日志的开关。

                (非零即真,0为“发布阶段”,1为“开发阶段”)


    枚举 (enum)

      枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。

      默认情况下,枚举中每个元素的基础类型是 int。可以使用冒号指定另一种整数值类型。默认是从0开始,后者会在前者之上+1。


    动态内存分配 

      自动分配内存:当定义以基本类型的变量的时候,系统会地方为这个变量自动分配内存,这个 内存在堆上。当作用域结束,系统会自动将这个内存回收。

      动态分配内存:开发人员自己向系统申请的内存空间,申请的内存位于栈上,当作用于结 束之后,系统是不会自动收回内存的。这个内存必须由开发人员自己去释 放。如果不释放,就内存泄露了。free(void *)这个函数进行释放,这里值得注意的是free的参数必须为指针,并且是动态内存分配的

    △什么时候需要动态分配内存?

      程序运行过程中,需要保存/记录相应的数据,但是又没有提前准备好内存,那么就需要临时动态分配内存。

    △使用函数:

      void *malloc(size_t);

      size_t: 希望申请的内存空间(字节byte)

      void *  :系统一开始不知道你需要存放什么数据,不同的数据需要的内存空间不一样,所以默认就是给一个void *,泛指所有指针类型(char *, int *, struct *),当在使用的时候必须将void *转化为相应的类型。如果没有申请成功,那么返回值为NULL。

          所以每次申请内从空间之后都要检验是否成功开辟内存空间


    △计算结构体内存空间

     原理:如果结构体内部拥有多种数据类型,那么以占据内存字节数最高的类型对齐

    typedef struct{

        char *name;

        int age;

    }Person;//16

    char * 占据8个字节, int 占据4个字节

    所以age变量自动向name对齐。整个占据16个字节

     

    typedef struct{

        char name;

        int age;

    }Person;//8

     

    typedef struct{

        char name[2];

        int age;

    }Person;//8

     

    typedef struct{

        char name[6];

        int age;

    }Person;//12

    P.S.①指针变量默认都要赋初值,如果没有则为NULL,这是因为防止野指针的出现。 

      ②函数中尽量不要返回指针

    18:52:16

  • 相关阅读:
    C# .NET 支付宝IOT小程序AES密钥解密
    aws平台中为ec2实例添加双网卡
    Python使用lxml模块和Requests模块抓取HTML页面的教程
    CentOS下安装PHP Oracle数据库扩展
    如何在Ubuntu 16.04上安装配置Redis
    zabbix参考文档
    docker学习网站
    设置Linux打开文件句柄/proc/sys/fs/file-max和ulimit -n的区别
    MySql按字段分组取最大值记录 [此博文包含图片]
    dokcer使用--link 让容器相连
  • 原文地址:https://www.cnblogs.com/immustard/p/5046181.html
Copyright © 2011-2022 走看看