Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Sao chép sâu (Deep Copy) mảng thành viên struct trong C


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