用C++分别举一个浅拷贝和深拷贝的例子
时间: 2024-05-12 09:17:19 浏览: 89
好的,我明白了您的问题。下面是C语言中浅拷贝和深拷贝的例子:
浅拷贝:
```
#include <stdio.h>
#include <string.h>
struct Book {
char title[50];
char author[50];
int book_id;
};
int main() {
struct Book book1;
struct Book book2;
strcpy(book1.title, "C Programming");
strcpy(book1.author, "Author1");
book1.book_id = 1;
book2 = book1;
printf("Book 1 title : %s\n", book1.title);
printf("Book 2 title : %s\n", book2.title);
return 0;
}
```
在上面的代码中,`book2 = book1` 会进行浅拷贝,即将 `book1` 的值复制到 `book2` 中,但是两个结构体共享同一个内存空间,如果修改一个结构体的值,另一个也会跟着改变。
深拷贝:
```
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Book {
char title[50];
char author[50];
int book_id;
};
int main() {
struct Book book1;
struct Book book2;
strcpy(book1.title, "C Programming");
strcpy(book1.author, "Author1");
book1.book_id = 1;
// 分配内存并将 book1 的值复制到新的内存空间中
book2.title = (char*)malloc(strlen(book1.title) + 1);
strcpy(book2.title, book1.title);
// 类似的方式复制 book1 的 author 字段
book2.author = (char*)malloc(strlen(book1.author) + 1);
strcpy(book2.author, book1.author);
book2.book_id = book1.book_id;
printf("Book 1 title : %s\n", book1.title);
printf("Book 2 title : %s\n", book2.title);
// 需要手动释放内存,避免内存泄漏
free(book2.title);
free(book2.author);
return 0;
}
```
在上面的代码中,我们为 `book2` 分配了新的内存空间,并且手动将 `book1` 的值复制到新的内存空间中,这样做就可以避免两个结构体共享同一个内存空间的问题。需要注意的是,如果进行了动态内存分配,在结束程序前需要手动释放内存,避免内存泄漏。
阅读全文