0965303260
TP. Hồ Chí Minh

[C]. Union

Kiểu Union trong C tương tự với struct nhưng có 1 vài điểm khác biệt, bài viết này sẽ hướng dẫn bạn về Union và so sánh union với struct 

NỘI DUNG : 

  • Kiểu union
  • Sự khác nhau giữa union và struct

union

1. Kiểu Union

Union cũng là kiểu dữ liệu mà người dùng tự định nghĩa tương tự như struct, union cũng có các thành phần dữ liệu để mô tả thông tin của đối tượng mà bạn đang muốn lưu trữ

Tuy nhiên điểm khác biệt với struct đó là struct thì các thành phần của nó có thể lưu trữ giá trị đồng thời tại cùng một thời điểm còn union thì ngược lại, tại mỗi thời điểm bạn chỉ có một thuộc tính của union lưu trữ 1 giá trị nào đó.

Tất cả các thành phần của union sẽ chia sẻ chung 1 vùng nhớ

Cú pháp : 

union union_name{
    data_type1 member1;
    data_type2 member2;
    data_type3 member3;
    ....
    data_typeN memberN;
};

Để truy cập các thành phần của union bạn cũng dùng toán tử '.' với biến union bình thường hoặc toán tử '->' với kiểu con trỏ union

Ví dụ 1 : Các thuộc tính của union sẽ có giá trị giống nhau tại cùng 1 thời điểm

#include "stdio.h"
#include "string.h"

union SinhVien{
    char masv[20];
    char hoten[50];
    double gpa;
};

typedef union SinhVien SinhVien;

int main(){
    SinhVien s;
    strcpy(s.masv, "CNTT1");
    strcpy(s.hoten, "Nguyen Van 28Tech");
    printf("Ma sinh vien : %s\n", s.masv);
    printf("Ho ten : %s\n", s.hoten);
    return 0;
}

Output : 

Ma sinh vien : Nguyen Van 28Tech
Ho ten : Nguyen Van 28Tech


Ví dụ 2 : Kích thước của union sẽ là kích thước của thuộc tính lớn nhất của nó

#include "stdio.h"
#include "string.h"

union Example1{
    char kitu;
    double sothuc;
    int songuyen;
};

typedef union Example1 Example1;

union Example2{
    char x[20];
    char y[10];
    int n;
};

typedef union Example2 Example2;

int main(){
    printf("%d\n%d\n", sizeof(Example1), sizeof(Example2));
    return 0;
}

Output : 

8
20


2. Sự khác nhau giữa union và struct

Union và struct giống nhau bao gồm : 

  • Đều là kiểu dữ liệu mà người dùng tự định nghĩa ra nhằm phục vụ các bài toán thực tế
  • Có các thuộc tính thành phần 
  • Truy cập thuộc tính thông qua toán tử '.' hoặc toán tử '->' đối với biến kiểu con trỏ 

Sự khác nhau giữa 2 kiểu dữ liệu người dùng định nghĩa được liệt kê dưới đây : 

structunion
Kích thước của struct thường lớn hơn hoặc bằng tổng tất cả các kích thước của các thuộc tính thành phầnKích thước của union bằng với kích thước của thuộc tính có kích thước lớn nhất của nó
struct có thể lưu trữ đồng thời nhiều giá trị cho các thuộc tính thành phần ở cùng một thời điểmChỉ có 1 thuộc tính thành phần của union có thể lưu giá trị tại 1 thời điểm
Khai báo với từ khóa structKhai báo với từ khóa union