Kiểu union

Kiểu Union

Kiểu union là một kiểu đặc biệt trong ngôn ngữ C cho phép lưu nhiều kiểu dữ liệu khác nhau trong cùng một ô nhớ.

1
2
3
4
5
6
7
8
9
union Data {
  int i; // 4 bytes
  double d; // 8 bytes
};

int main() {
  union Data data;
  printf("Size = %d", sizeof(data)); // in 8
}

Đọc và ghi lên kiểu union

1
2
3
4
5
6
7
8
9
int main() {
  union Data data;        

  data.i = 10;
  data.d = 22.5;

  printf("data.i : %d\n", data.i); // in 0
  printf("data.d : %f\n", data.d); // in 22.5
}

Dữ liệu khi in giá trị số nguyên (biến i) là 0 bởi vì giá trị này đã bị giá trị double ghi đè. Để lấy giá trị số nguyên đúng, chúng ta đọc các giá trị số nguyên này trước khi bị ghi đè bởi giá trị kiểu double.

1
2
3
4
5
6
7
8
9
int main() {
  union Data data;        

  data.i = 10;
  printf("data.i : %d\n", data.i); // in 10

  data.d = 22.5;
  printf("data.d : %f\n", data.d); // in 22.5
}