union和enum使用

老司機的詩和遠方發表於2020-04-06

一、聯合(union)

1.定義

聯合與結構相似,也可以容納不同型別的值,但每次只能存一個值,若在容納另一個值將會把前面的值覆蓋調(即:多個變數使用同一個記憶體空間,但記憶體空間只有1個,所以要這些變數在不同時間用才行)

2.結構

union mima//這裡和結構體類似,就是吧struct改為union
{
unsigned long birthday;
unsigned short ssn;
char *pet;
};
mima mima_1;//建立該聯合型別的變數

//對結構成員進行賦值
mima_1.birthday=19980105;

//然後再執行下面語句(這裡是驗證聯合型別只能存一個值,否則會被覆蓋)
mima_1.pet=”xxx”//執行這個語句時會把birthday成員的值丟棄

3.舉例

#include <iostream>
using namespace std;

union mima
{
    unsigned long birthday;
    unsigned short ssn;
    char *pet;
};


int main()
{
    mima mima_1;

    mima_1.birthday=19980105;
    cout<<mima_1.birthday<<"\n";
    mima_1.pet="xxx";
    cout<<mima_1.pet<<"\n";
    cout<<mima_1.birthday<<"\n";//這個的值已經被覆蓋,輸出的是它在記憶體中的地址
    return 0;
}
//19980105
//xxx
//4751362
  • 1

4.總結

1.為了節省空間時使用聯合型別(只提供一個記憶體)
2.使用不同方式解釋資料時不用強制轉換時也可以用聯合型別


二、列舉(enum)

1.定義

列舉(enum)型別用來建立一個可取值的列表

2.用法(結構)

enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday};

//下面建立該型別的變數
weekdays today;
//下面方式對它賦值
today Thursday;//注意Monday,Tuesday…這些並不是字串,而是從0開始的值,變數的賦值只能出現在上面五個元素中

3.舉例

#include <iostream>
using namespace std;

int main()
{
    enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday};//這些值不是字串,預設Monday為0,Tuesday為1...... 

    weekdays today;

    today=Monday;
    cout<<today<<"\n";

    today=Tuesday;
    cout<<today<<"\n"; 
    return 0;
}
//結果是0,1
  • 1
  • 若將Monday賦值為1
#include <iostream>
using namespace std;

int main()
{
    enum weekdays{Monday=1,Tuesday,Wednesday,Thursday,Friday};

    weekdays today;

    today=Monday;
    cout<<today<<"\n";

    today=Tuesday;
    cout<<today<<"\n"; 
    return 0;
}
//結果是1,2
  • 1

4.總結

1.它可以對變數的可取值加以限制(比如本來列舉定義為Monday,若後面寫成Monday1,是不實現的)
2.它可以用作switch條件語句的case標號(因為字串不能作為case的標號用)(小技巧)

這裡寫圖片描述

相關文章