struct
Định nghĩa
struct
là 1 tập hợp các phần tử dữ liệu cùng kiểu hoặc khác kiểu được gộp chung thành 1 nhóm. Các phần tử này được gọi là thành viên của struct
.
Cú pháp
struct <Tên struct> { <Kiểu dữ liệu thành viên số 1> <Tên thành viên số 1>; <Kiểu dữ liệu thành viên số 2> <Tên thành viên số 2>; … };
Ví dụ
struct Subject { string m_name_subject; string m_pre_subject; int m_hour_per_week; string m_trainer; };
Sử dụng struct
-
Để truy cập vào các thành viên của
struct
sử dụng toán tử dấu chấm (.
) đặt giữa tên biến kiểustruct
và tên thành viên củastruct
cần truy cập. -
1 biến thuộc kiểu
struct
cũng có thể trở thành tham số của 1 hàm. -
Có thể truy cập thành phần của
struct
thông qua biến con trỏ.
Để rõ hơn, theo dõi đoạn mã nguồn dưới đây:
#include <iostream> #include <string> using namespace std; /*Declare a struct called Subject*/ struct Subject { string m_name_subject; //delare member types string m_pre_subject; int m_hour_per_week; string m_trainer; }; void PrintSubjectInformation(Subject object) { cout << object.m_name_subject << endl; cout << object.m_trainer << endl; cout << object.m_hour_per_week << endl; cout << object.m_pre_subject << endl; } int main() { Subject subject; // Access the member of struct Subject through subject subject.m_name_subject = "Game Programming"; subject.m_pre_subject = "Basic Programming"; subject.m_hour_per_week = 4; subject.m_trainer = "Vu Quang Huy"; PrintSubjectInformation(subject); return 0; }
union
Định nghĩa
Cũng giống như struct
, union
là 1 tập hợp các phần tử dữ liệu cùng kiểu hoặc khác kiểu được gộp chung thành 1 nhóm. Các phần tử này được gọi là thành viên của union
.
Cú pháp
union <Tên struct> { <Kiểu dữ liệu thành viên số 1> <Tên thành viên số 1>; <Kiểu dữ liệu thành viên số 2> <Tên thành viên số 2>; … };
Ví dụ
union <Tên struct> { <Kiểu dữ liệu thành viên số 1> <Tên thành viên số 1>; <Kiểu dữ liệu thành viên số 2> <Tên thành viên số 2>; … };
Sử dụng union
-
Để truy cập vào các thành viên của
union
sử dụng toán tử dấu chấm (.
) đặt giữa tên biến kiểuunion
và tên thành viên củaunion
cần truy cập. -
1 biến thuộc kiểu
union
cũng có thể trở thành tham số của 1 hàm. -
Có thể truy cập thành viên của
union
thông qua biến con trỏ.
Để rõ hơn, có thể theo dõi đoạn mã nguồn dưới đây:
#include <iostream> using namespace std; /* Declare */ union Post { int m_iValue; float m_fValue; //delare member types long m_lValue; }; void PrintSubjectInformation(Post post) { cout << post.m_iValue << endl; cout << post.m_fValue << endl; cout << post.m_lValue << endl; } int main() { Post post; post.m_iValue = 169; // Access the member of union post.m_fValue = 39.01; post.m_lValue = 123; PrintSubjectInformation(post); return 0; }
Output

Khi thay đổi giá trị post.m_lValue = 123;
đã làm ảnh hướng đến giá trị của các thành viên còn lại. Điều này sẽ được giải thích ở phần sau.
So sánh struct và union
Về mặt ý nghĩa, struct và union cơ bản giống nhau. Tuy nhiên, về mặt lưu trữ trong bộ nhớ, chúng có sự khác biệt rõ rệt như sau:
-
struct: Dữ liệu của các thành viên của struct được lưu trữ ở những vùng nhớ khác nhau. Do đó kích thước của 1 struct chắc chắn lớn hơn kích thước của các thành viên cộng lại.
Tại sao lại lớn hơn kích thước của thành viên?
Lý do
Tùy thuộc và kích thước của khối nhớ do hệ thống quy định.
Ví dụ
Hệ thống quy định khối nhớ là 1 byte, thì kích thước của kiểu dữ liệu sSinhVien
là 13 bytes.
struct sSinhVien { char m_id[5]; float m_height; float m_weight; };

Thông tin thêm
- struct: thực tế
struct
trên nếu lấy kích thước thông thường sẽ có "hiệu ứng" Alignment nên kích thước sẽ không phải là 13 bytes, có thể đọc thêm bài Struct Alignment Trong C++. -
union
: vớiunion
, các thành viên sẽ dùng chung 1 vùng nhớ. Kích thước củaunion
được tính là kích thước lớn nhất của kiểu dữ liệu trongunion
. Việc thay đổi nội dung của 1 thành viên sẽ dẫn đến thay đổi nội dung của các thành viên khác.
