Struct là kiểu dữ liệu do người dùng định nghĩa, gom nhiều kiểu dữ liệu khác nhau thành một kiểu duy nhất. Có nhiều thành viên (members) và biến struct. Truy cập thành viên bằng toán tử chấm ..
Cú pháp
struct struct_name {
member_definitions;
} struct_variables;
Ví dụ
#include <stdio.h>
#include <string.h>
struct Data {
int i;
long int f;
} data, data1;
int main() {
data.i = 28;
printf("Gia tri i: %d\n", data.i);
printf("Kich thuoc data: %zu, data1: %zu\n", sizeof(data), sizeof(data1));
return 0;
}
Kết quả
Gia tri i: 28
Kich thuoc data: 16, data1: 16
Giải thích: Struct Data có int (4B) + long int (8B trên 64-bit) = 12B, nhưng do alignment/padding nên kích thước = 16B. Thành viên truy cập qua data.i.
Đặc điểm quan trọng
- Padding/Alignment: Compiler chèn byte đệm để căn chỉnh địa chỉ (ví dụ: int 4B, double 8B -> double phải ở địa chỉ chia hết 8).
- Kích thước:
sizeof(struct)≥ tổng kích thước thành viên. - Khởi tạo:
struct Data d = {10, 20L};hoặc designated initializer{.i=10, .f=20L}(C99). - Con trỏ struct: Dùng mũi tên
ptr->member.
Mẹo: Sắp xếp thành viên từ lớn đến nhỏ (hoặc theo alignment) để giảm padding tiết kiệm bộ nhớ.