– Union cũng như kiểu cấu trúc, nó khác ở chỗ : các thành phần của cấu trúc được cấp phát các vùng nhớ khác nhau, còn các thành phần của union được cấp phát 1 vùng nhớ chung.
– Kích thước của union bằng kích thước của thành phần có kích thước lớn nhất.
1. Khai báo union
Cách 1:
union <tên union> { <Kiểu dữ liệu> Biến 1; <Kiểu dữ liệu> Biến 2; ... <Kiểu dữ liệu> Biến n; };
Cách 2:
typedef union { <Kiểu dữ liệu> Biến 1; <Kiểu dữ liệu> Biến 2; ... <Kiểu dữ liệu> Biến n; }<danh sách tên biến>;
2. Cách truy cập đến phần tử trong union
Tương tự như truy cập đến các phần tử trong struct.
Ví dụ 1: Kích thước của union = kích thước của thành phần lớn nhất của union
#include <conio.h> #include <stdio.h> typedef union { char c; int arr[10]; }UNION; void main() { UNION m; printf("\n kich thuoc cua union = %d",sizeof(m)); printf("\n kich thuoc cua mang arr[10] = %d", sizeof(m.arr)); getch(); }
Kết quả:
kich thuoc cua union = 40
kich thuoc cua mang arr[10] = 40
Ví dụ 2: Xung đột dữ liệu khi dùng kiểu union
#include <stdio.h> #include <conio.h> #include <string.h> union Data { int i; float f; char str[20]; }; void main() { union Data data; data.i = 10; data.f = 220.5; strcpy( data.str, "C Programming"); printf( "data.i : %d\n", data.i); printf( "data.f : %f\n", data.f); printf( "data.str : %s\n", data.str); getch(); }
Kết quả:
data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming
– Kích thước tối đa của union Data = kích thước của mảng str = 20 byte.
– Khi ta gán data.i = 10,ta lại tiếp tục gán data.j = 220.5 thì giá trị này sẽ được copy đè lên biến i, câu lệnh gán cuối cùng sẽ chuỗi “C Programming” sẽ được copy đè lên biến j. Kết quả cuối cùng là giá trị của biến i và j sẽ không chính xác.
Tiếp theo, các bạn có thể xem ví dụ dưới đây để biết khi nào sử dụng union.
Ví dụ 3:
#include <stdio.h> #include <conio.h> #include <string.h> union Data { int i; float f; char str[20]; }; void main() { union Data data; data.i = 10; printf( "data.i : %d\n", data.i); data.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); getch(); }
Kết quả:
data.i : 10
data.f : 220.500000
data.str : C Programming
Ta thấy, tại một thời điểm trong chương trình chỉ có 1 thành phần của union được sử dụng.
Leave a Reply
You must be logged in to post a comment.