Kiểu Union và Kiểu liệt kê Enum trong lập trình C/C++

BÀN VỀ KIỂU UNION
Kiểu union là một dạng cấu trúc dữ liệu đặc biệt của ngôn ngữ C. Nó rất giống với kiểu struct. Chỉ khác một điều, trong kiểu union, các trường được phép dùng chung một vùng nhớ. Hay nói cách khác, cùng một vùng nhớ ta có thể truy xuất dưới các dạng khác nhau.
Khai báo tổng quát của kiểu union như sau:

C Code:

Select All | Show/Hide

  1. typedef

    union

    <

    tên kiểu union

    >

  2. {

  3.      

    <

    kiểu dữ liệu

    >

    <

    tên trường

    >;

  4.      

    <

    kiểu dữ liệu

    >

    <

    tên trường

    >;

  5.      ………

    // còn nhiều trường nữa

  6. }

    [

    <

    Name

    >

    ]

    ;

C Code:

Select All | Show/Hide

  1. typedef

    union

    tagNumber

  2. {

  3.    

    int

    i

    ;

  4.    

    long

    l

    ;

  5. }

     Number

    ;

n.l = 3000;
thì giá trị của n.i cũng bị thay đổi (n.i sẽ bằng 3000);
Việc dùng kiểu union rất có lợi khi cần khai báo các CTDL mà nội dung của nó thay đổi tùy trạng thái. Ví dụ để mô tả các thông tin về một con người ta có thể khai báo một kiểu dữ liệu như sau:

C Code:

Select All | Show/Hide

  1. struct

    tagNguoi

  2. {

  3.  

    char

    HoTen

    [

    35

    ]

    ;

  4.  

    int

    NamSinh

    ;

  5.  

    char

    NoiSinh

    [

    40

    ]

    ;

  6.  

    char

    GioiTinh

    ;

    //0: Nữ, 1: Nam

  7.  

    char

    DiaChi

    [

    50

    ]

    ;

  8.  

    char

    Ttgd

    ;

    //0:Không có gia đình, 1: Có gia đình

  9.  

    union

  10.  

    {

  11.      

    char

    tenVo

    [

    35

    ]

    ;

  12.      

    char

    tenChong

    [

    35

    ]

    ;

  13.  

    }

  14. }

    Nguoi

    ;

Tùy theo người mà ta đang xét là nam hay nữ ta sẽ truy xuất thông tin qua trường có tên tenVo hoặc tenChong.

Kiểu union là một dạng cấu trúc dữ liệu đặc biệt của ngôn ngữ C. Nó rất giống với kiểu struct. Chỉ khác một điều, trong kiểu union, các trường được phép dùng chung một vùng nhớ. Hay nói cách khác, cùng một vùng nhớ ta có thể truy xuất dưới các dạng khác nhau.Khai báo tổng quát của kiểu union như sau:Ví dụ, ta có thể định nghĩa kiểu số sau:Ồ, sao mà giống kiểu struct vậy ta, 2 thằng này là một sao? Hi, không phải vậy đâu, sự việc là như thế này: việc truy xuất đến một trường trong union được thực hiện hoàn toàn giống như trong struct. Giả sử có biến n kiểu Number. Khi đó, n.i cho ta một số kiểu int còn n.l cho ta một số kiểu long, nhưng cả hai đều dùng chung một vùng nhớ. Vì vậy, khi ta gánn.l = 3000;thì giá trị của n.i cũng bị thay đổi (n.i sẽ bằng 3000);Việc dùng kiểu union rất có lợi khi cần khai báo các CTDL mà nội dung của nó thay đổi tùy trạng thái. Ví dụ để mô tả các thông tin về một con người ta có thể khai báo một kiểu dữ liệu như sau:Tùy theo người mà ta đang xét là nam hay nữ ta sẽ truy xuất thông tin qua trường có tên tenVo hoặc tenChong.