浅拷贝只拷贝指针变量的值,不需要分配释放空间。
深拷贝则需要分配空间释放空间。
使用时需考虑应用场景。
浅拷贝
#include "stdio.h"
#include <stdlib.h>
#include "string.h"
typedef struct Tea{
char name[64];
int age;
char *aliname;
}Tea;
void Copyteacher(Tea *from,Tea *to)
{
//浅拷贝(结构体中嵌套一个一级指针或者二级指针)
//编译器的 = 操作只会把 from 的指针变量的值拷贝到 to 空间去
//*to = *from;
memcpy(to,from,sizeof(Tea));
}
void main()
{
Tea T1;
Tea T2;
strcpy(T1.name,"s1");
T1.aliname = (char*)malloc(100);
strcpy(T1.aliname,"sw1");
//拷贝T1到T2
Copyteacher(&T1,&T2);
printf("%s\n",T2.name);
printf("%s\n",T2.aliname);
if( T1.aliname != NULL )
{
free(T1.aliname);
T1.aliname = NULL;
}
system("pause");
}
深拷贝
#include "stdio.h"
#include <stdlib.h>
#include "string.h"
typedef struct Tea{
char name[64];
int age;
char *aliname;
}Tea;
void Copyteacher(Tea *from,Tea *to)
{
//浅拷贝(结构体中嵌套一个一级指针或者二级指针)
//编译器的 = 操作只会把 from 的指针变量的值拷贝到 to 空间去
//*to = *from;
//memcpy(to,from,sizeof(Tea));
//深拷贝(想要深拷贝就显式的分配内存然后释放内存)
*to = *from;
to->aliname = (char*)malloc(100);
strcpy(to->aliname,from->aliname);
}
void main()
{
Tea T1;
Tea T2;
strcpy(T1.name,"s1");
T1.aliname = (char*)malloc(100);
strcpy(T1.aliname,"sw1");
//拷贝T1到T2
Copyteacher(&T1,&T2);
printf("%s\n",T2.name);
printf("%s\n",T2.aliname);
if( T1.aliname != NULL )
{
free(T1.aliname);
T1.aliname = NULL;
}
if( T2.aliname != NULL )
{
free(T2.aliname);
T2.aliname = NULL;
}
system("pause");
}