一、浅拷贝
含义:多个指针指向同一个内存(如生活中的共享)
特点:不能修改
1.如字符串常量就是浅拷贝,不允许修改
char *str1 = "hello world";
char str1[0] = 'a';//error
2.指针数组
int main()
{
char buf[100];
char *str[3];//指针数组
int i;
for(i=0;i<3;i++)
{
scanf("%s",buf);//123 1234 12345
str[i] = buf;
}
int main()
{
char buf[100];
char *str[3];//指针数组
int i;
for(i=0;i<3;i++)
{
scanf("%s",buf);//123 1234 12345
str[i] = buf;
}
for(i=0;i<3;i++)
{
printf("%s\n",str[i]);//12345 12345 12345
}
{
printf("%s\n",str[i]);//12345 12345 12345
}
return 0;
}
}
3.free
realloc
int *q = (int *)malloc(20*sizeof(int)); //创建新家
for(i = 0;i<10;i++)
{
*q[i] = *p[i]; //搬家
}
free(p); //释放旧地址
p = q; //更新新地址
q = NULL; //浅拷贝发生错误,多个指针不能指向同一个内存,所以q = NULL
二、深拷贝
含义:各自内存互不干扰,如自己的私人物品自己随意处理
//深拷贝 将从键盘中读取的字符串复制到另一数组里打印出
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<vld.h>
int main()
{
char buf[100];
char *str[3];//
int i;
for(i=0;i<sizeof(str)/sizeof(str[0]);i++)
{
scanf("%s",buf);
str[i] = (char*)malloc(strlen(buf)+1);
strcpy(str[i],buf);
}
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<vld.h>
int main()
{
char buf[100];
char *str[3];//
int i;
for(i=0;i<sizeof(str)/sizeof(str[0]);i++)
{
scanf("%s",buf);
str[i] = (char*)malloc(strlen(buf)+1);
strcpy(str[i],buf);
}
for(i=0;i<3;i++)
{
printf("%s\n",str[i]);
}
for(i = 0;i<sizeof(str)/sizeof(str[0]);i++)
{
free(str[i]);
}
return 0;
}
{
printf("%s\n",str[i]);
}
for(i = 0;i<sizeof(str)/sizeof(str[0]);i++)
{
free(str[i]);
}
return 0;
}