浅拷贝,深拷贝

来源:互联网 发布:四川大学成教学院网络 编辑:程序博客网 时间:2024/06/02 00:54

一、浅拷贝

含义:多个指针指向同一个内存(如生活中的共享)

特点:不能修改

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;
 }

 for(i=0;i<3;i++)
 {
  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);
 }

 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;
}