C/C++拾遗(三)浅拷贝和深拷贝
C/C++拾遗(三)浅拷贝和深拷贝
她吃西红柿 发表于5个月前
C/C++拾遗(三)浅拷贝和深拷贝
  • 发表于 5个月前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

在iOS开发中也会涉及到浅拷贝和深拷贝,简而言之:

  • 浅拷贝:拷贝指针变量的值
  • 深拷贝:拷贝指针所指向内存空间

不过这次我们通过C语言来实现:

//声明一个结构体
typedef struct Person {
    char name[20];
    int age;
    char *alias;
}Person;

//拷贝方法
void copyPerson(Person *from, Person *to){
    
    *to = *from;
}
//main函数
int main(int argc, const char * argv[]) {
    
    Person p1;
    p1.age  = 11;
    strcpy(p1.name, "royce");
    p1.alias = "owen";
    Person p2;
    
    copyPerson(&p1, &p2);
    
    printf("p2:%p p1:%p\np2-alias:%p p1-alias:%p\n",&p2,&p1,p2.alias,p1.alias);

    return 0;
}
//打印
p2-alias:0x100000f80 p1-alias:0x100000f80

我们发现p1的alias和p2的alias指向了同一块内存空间,编译器=号赋值默认浅拷贝

实现深拷贝

void copyPerson(Person *from, Person *to){
    
    *to = *from;
    to->alias = (char *)malloc(100);
    strcpy(to->alias, from->alias);

}
//打印
p2-alias:0x1003069a0 p1-alias:0x100000f82

我们给p2的alias重写分配了内存,然后将p1的alias拷贝进去

标签: C/C++
共有 人打赏支持
粉丝 33
博文 42
码字总数 21178
×
她吃西红柿
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: