Tổng quan
Trong C, ta có container cho cả dữ liệu cùng kiểu và khác kiểu. Để lưu trữ dữ liệu cùng kiểu, C cung cấp Array; còn để lưu trữ dữ liệu khác kiểu, C có Structure và Union.
Mặc dù cả Structure và Union đều chứa nhiều kiểu dữ liệu, nhưng dựa trên triển khai nội bộ, chúng có những khác biệt quan trọng:
| STT | Tiêu chí | Structure | Union |
|---|---|---|---|
| 1 | Định nghĩa | Structure là container trong C lưu trữ biến khác kiểu, cũng hỗ trợ lưu biến do người dùng định nghĩa. | Union cũng là container tương tự, chứa các biến khác kiểu và biến do người dùng định nghĩa. |
| 2 | Triển khai nội bộ | Mỗi thành viên (member) được cấp phát vùng nhớ riêng biệt. | Chỉ cấp phát bộ nhớ cho thành viên có kích thước lớn nhất, và vùng nhớ này được chia sẻ cho tất cả các thành viên. |
| 3 | Cú pháp | struct ten_struct {
kieu thanh_vien1;
kieu thanh_vien2;
...
} bien1, bien2, ...; |
union ten_union {
kieu thanh_vien1;
kieu thanh_vien2;
...
} bien1, bien2, ...; |
| 4 | Kích thước (Size) | Kích thước Structure bằng hoặc lớn hơn tổng kích thước tất cả các thành viên (do padding/alignment). | Kích thước Union bằng kích thước của thành viên lớn nhất. |
| 5 | Lưu trữ giá trị | Có vùng nhớ riêng cho từng thành viên → lưu trữ được nhiều giá trị cùng lúc. | Chỉ có một vùng nhớ chung → chỉ lưu trữ được một giá trị tại một thời điểm cho tất cả thành viên. |
| 6 | Khởi tạo (Initialization) | Có thể khởi tạo nhiều thành viên cùng lúc. | Chỉ có thể khởi tạo thành viên đầu tiên tại một thời điểm. |