Struct cho phép tạo kiểu dữ liệu tự định nghĩa. Thành viên struct có thể là kiểu nguyên thủy hoặc mảng cấp phát tĩnh. Khi gán biến struct này cho biến khác, thường thực hiện shallow copy. Tuy nhiên, có ngoại lệ: nếu thành viên là mảng, trình biên dịch tự động thực hiện deep copy. Xem ví dụ:
Ví dụ
#include <stdio.h>
#include <string.h>
typedef struct student {
int roll_num;
char name[128];
} student_t;
void print_struct(student_t *s) {
printf("Roll num: %d, name: %s\n", s->roll_num, s->name);
}
int main() {
student_t s1, s2;
s1.roll_num = 1;
strcpy(s1.name, "tom");
s2 = s1;
// Nội dung s1 không bị ảnh hưởng vì deep copy được thực hiện trên mảng
s2.name[0] = 'T';
s2.name[1] = 'O';
s2.name[2] = 'M';
print_struct(&s1);
print_struct(&s2);
return 0;
}
Kết quả
Khi biên dịch và chạy code trên, đầu ra:
Roll num: 1, name: tom Roll num: 1, name: TOM