Sao chép struct trong c | Laptrinhcanban.com

Sao chép struct trong c

Hướng dẫn cách sao chép struct trong C. Bạn sẽ học được 2 cách căn bản để copy struct trong C sau bài học này.

Chúng ta có 2 phương pháp sao chép struct trong c như sau:

  • Sử dụng toán tử bằng
  • Sử dụng con trỏ

Sao chép struct trong C bằng toán tử bằng

Để sao chép (copy) toàn bộ nội dung của một thực thể của một cấu trúc sang một thực thể khác cùng kiểu, chúng ta có thể sử dụng toán tử bằng để gán giá trị, với cú pháp sau đây:

des_instance = src_instance;

Trong đó src_instance là thực thể nguồn cần copy, và des_instance là thực thể đích cần dán vào.

Sao chép struct trong C bằng toán tử bằng

Lưu ý là cả 2 thực thể này cần được tạo từ chung một kiểu cấu trúc (struct), để đảm bảo cấu trúc của chúng cũng như kiểu của các thành viên giữa chúng giống nhau thì mới tiến hành sao chép được.

Ví dụ cụ thể, chúng ta tạo ra hai thực thể p1p2 từ một kiểu cấu trúc person_1, rồi copy nội dung của p1 sang p2 như sau:

#include <stdio.h>

typedef struct {
char name[20];
char sex[10];
int age;
double height;
double weight;
} person_1;

int main(void)
{
person_1 p1 = {"Tom", "M", 19, 175.2, 69.5};
person_1 p2;

p2 = p1; /*Sao chép struct p1 sang p2 */

printf("p1: %s %s %d %.1f %.1f\n", p1.name, p1.sex, p1.age, p1.height, p1.weight);
printf("p2: %s %s %d %.1f %.1f\n", p2.name, p2.sex, p2.age, p2.height, p2.weight);

return 0;
}

Kết quả sao chép kiểu cấu trúc trong C:

p1: Tom M 19 175.2 69.5
p2: Tom M 19 175.2 69.5

Bạn có thể thấy toàn bộ nội dung của p1 đã được copy sang p2 rồi phải không nào?

Sao chép struct trong C bằng con trỏ

Phương pháp thứ hai để sao chép struct trong C chính là sử dụng con trỏ. Bằng cách sử dụng con trỏ, sẽ rất thuận tiện cho chúng ta để sao chép giá trị của thực thể của struct tại địa chỉ được lưu trong con trỏ.

Trong phương pháp này chúng ta cũng sử dụng tới toán tử bằng. Tuy nhiên chúng ta không gán trực tiếp giá trị của hai thực thể trong struct, mà sẽ gán gán tiếp thông qua con trỏ của chúng.

Để làm được điều này thì chúng ta cần tạo ra con trỏ nguồn chứa địa chỉ của thực thể nguồn, và con trỏ đích để chứa địa chỉ của thực thể đích. Sau đó thì gán giá trị của con trỏ nguồn cho con trỏ đích là xong.

Sao chép struct trong C bằng con trỏ

Ví dụ cụ thể, chúng ta tạo ra hai con trỏ để chứa địa chỉ của các thực thể p1p2 được tạo ra từ kiểu cấu trúc people, rồi copy nội dung của p1 sang p2 thông qua phép gán con trỏ như sau:

#include <stdio.h>

typedef struct person {
char *name;
char sex;
int age;
char *add;
char *job;
} person2;

int main(void) {
person2 kiyoshi = {"Kiyoshi", 'm', 30, "Tokyo", "BrSE"};
printf("p1= %s %d %s %s\n", kiyoshi.name, kiyoshi.age, kiyoshi.add, kiyoshi.job);

//Khai báo con trỏ nguồn và gán địa chỉ thực thể nguồn
person2 *p1;
p1 = &kiyoshi;

//Khai báo con trỏ đích và gán địa chỉ thực thể đích
person2 kiyoshi2, *p2;
p2 = &kiyoshi2;

//Gán con trỏ nguồn vào con trỏ đích
//Qua đó sao chép thực thể nguồn vào thực thể đích
*p2 = *p1;
printf("p2= %s %d %s %s", kiyoshi2.name, kiyoshi2.age, kiyoshi2.add, kiyoshi2.job);

return 0;
}

Kết quả sao chép kiểu cấu trúc trong C:

p1= Kiyoshi 30 Tokyo BrSE
p2= Kiyoshi 30 Tokyo BrSE

Bạn có thể thấy toàn bộ nội dung của p1 đã được copy sang p2 rồi phải không nào?

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách sao chép struct trong c rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.