Computer >> Máy Tính >  >> Lập trình >> lập trình C

Bản sao sâu của mảng thành viên cấu trúc trong C

Cấu trúc cho phép chúng ta tạo kiểu dữ liệu do người dùng xác định. Thành viên cấu trúc có thể là kiểu dữ liệu nguyên thủy hoặc nó có thể là một mảng bộ nhớ được cấp phát tĩnh. Khi chúng ta gán một biến cấu trúc này cho một biến cấu trúc khác thì quá trình sao chép nông sẽ được thực hiện. Tuy nhiên, có một ngoại lệ, nếu thành viên cấu trúc là một mảng thì trình biên dịch sẽ tự động thực hiện sao chép sâu. Hãy để chúng tôi xem điều này với 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;
   // Contents of s1 are not affected as deep copy is performed on an array
   s2.name[0] = 'T';
   s2.name[1] = 'O';
   s2.name[2] = 'M';
   print_struct(&s1);
   print_struct(&s2);
   return 0;
}

Đầu ra

Khi bạn biên dịch và thực thi đoạn mã trên, nó sẽ tạo ra kết quả sau -

Roll num: 1, name: tom
Roll num: 1, name: TOM