文档章节

C/C++拾遗(三)浅拷贝和深拷贝

她吃西红柿
 她吃西红柿
发布于 2017/07/24 11:54
字数 243
阅读 28
收藏 0

在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拷贝进去

© 著作权归作者所有

共有 人打赏支持
她吃西红柿
粉丝 35
博文 52
码字总数 25812
作品 0
杭州
iOS工程师
C++雾中风景6:拷贝构造函数与赋值函数

在进行C++类编写的过程之中,通常会涉及到类的拷贝构造函数与类的赋值函数。初涉类编写的代码,对于两类函数的用法一直是挺让人困惑的内容。这篇文章我们会详细来梳理拷贝构造函数与赋值函数...

LeeHappen
01/17
0
0
MutableCopy & copy

分别遵守<NSCopying>和 <NSMutableCopying>协议,http://blog.csdn.net/tskyfree/article/details/7999620 首先了解深复制,浅复制: 浅复制和深复制是对于包含对象成员的对象而言的。 浅复制:...

AmoyAI
2012/12/11
0
0
【c++语法系列】【一】const详解

1.普通const变量初始化 3.const变量做函数参数 总结一:const常量与非const常量之间可以随意传输,但是const引用不行。只能非const引用传给const引用,不能const引用传递给非const引用。 一句...

muqiusangyang
05/08
0
0
C语言程序设计编程学习—内存操作函数库mem.h相关知识详解

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
03/24
0
0
C++构造函数详解及显式调用构造函数

C++构造函数详解及显式调用构造函数 参考地址:http://ticktick.blog.51cto.com/823160/194307 下面讨论一个重要问题是:构造函数的显式调用 --------------------------------------------...

IMGTN
2012/11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

软件测试工具书籍与面试题汇总下载(持续更新)

简介 本文是https://github.com/china-testing/python-api-tesing/blob/master/books.md 的节选。 欢迎转载,转载请附带此简介,谢谢! 试题 软件测试综合面试题(高级测试)-试题.pdf 软件测试...

python测试开发人工智能安全
30分钟前
1
0
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 解决

有个项目使用的log4j进行日志记录的,同时也是用log4j中的数据库配置直接把相应级别的日志直接插入oracle。 在把项目部署的另一个内网环境时候,把项目的其他配置都改了,唯独log4j中的数据库...

哥本哈根的小哥
40分钟前
1
0
耗时 2 年,用 8.5 万块乐高积木最牛复刻 Apple Park

简评:国外大佬复刻 Apple Park,看了一下细节,确实厉害!只有你想不到,没有乐高拼不起来的,有没有乐高大神挑战一下? 苹果公园以各种各样的方式鼓舞人心,让人感兴趣。从建筑、可持续性和...

极光推送
41分钟前
1
0
记一次查找Hdfs磁盘占用空间比实际存储文件大4倍的原因

在一次主备namenode发生切换后,重启datanode节点,发现磁盘空间很大,想清理一下磁盘, 通过命令Hdfs dfs -du -h --max-depth=1 / 发现实际文件的大小只有8g,通过du -h --max-depth=1 /ha...

PageYi
今天
5
0
阿里云推荐引擎使用教程

产品概述: 推荐引擎(Recommendation Engine,以下简称RecEng,特指阿里云推荐引擎)是在阿里云计算环境下建立的一套推荐服务框架,目标是让广大中小互联网企业能够在这套框架上快速的搭建满...

mcy0425
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部