zoukankan      html  css  js  c++  java
  • C++自定义数据类型

    C++中有以下几种自定义数据类型方式:typedef、union、enum

    typedef

    typedef只是用于重命名一种已有的数据类型。

    typedef char C;                //C c即char c 
    typedef char field [50];       //field s即char[50] 

    注意第二种用法,数组的维数[50]是写在最后的。

    union

    union中的每个成员共享同一段内存(每个成员的起始内存位置都是一样的),整个union的大小取决于最长的成员的大小。

    union mix_t
    {
        long l;
        struct 
        {
            short hi;
            short lo;
        }s;
        char c[4];
    }mix;

    这个union的内存示意图如图下所示(注意32位机器上,char为1byte,short为2bytes,long为4bytes)

    匿名union

    非匿名union(union的名字为price)

    struct 
    {
        char title[50];
        char author[50];
        union 
        {
            float dollars;
            int rmbs;
        } price;
    } book;

    匿名union(union没有名字)

    struct 
    {
        char title[50];
        char author[50];
        union 
        {
            float dollars;
            int rmbs;
        };
    } book;

    那么这两种结构的不同就是元素的访问方式不同,假如我们要访问dollars这个元素,第一种是book.price.dollars,第二种是book.dollars。

    enum

    枚举类型,其中枚举值是常量,而不是变量。

    enum days{Mon, Tue, Wed, Thur, Fri, Sat, Sun};
    days today = Mon;

    其中Mon其实是0,Tue是1,以此类推。

    当然Mon不一定要从0开始,所以可以这样写……

    enum days{Mon=1, Tue, Wed, Thur, Fri, Sat, Sun};

    其中Mon是1,Tue是2,以此类推。

    之前一直犯一个错误,直到今天(2015年4月11日)看objc的时候才发现,

    enum days{Mon, Tue=2, Wed};  //0 2 3
    cout << Mon << endl;  //输出0而不是1
  • 相关阅读:
    闪回flashback
    Oracle数据文件在open状态被删除的恢复记录
    从浅到深掌握Oracle的锁
    Oracle 11g 11201_RHEL5.5_RAC_VBOX 详细搭建步骤
    AWR Report 关键参数详细分析
    16、Xtrabackup备份与恢复
    17、percona-toolkit
    插入排序
    选择排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/chenyg32/p/3751763.html
Copyright © 2011-2022 走看看