【C语言提高41】结构体的浅copy和深copy
来源:互联网 发布:网络电话机怎么安装 编辑:程序博客网 时间:2024/04/29 05:35
编译器的=操作 只会把指针变量值 从from拷贝到to 但不会把指针变量所指的内存空间的拷贝过去 //浅拷贝
void copyTeacher(Teacher*to,Teacher*from){//*to=*from;memcpy(to,from,sizeof(Teacher));}
浅考本出现在结构体中套一个一级指针或者是二级指针
如果想执行深copy 应该显式的分配内存:
void copyTeacher(Teacher*to,Teacher*from){//*to=*from;memcpy(to,from,sizeof(Teacher));//如果想执行深copy 应该显示的分配内存to->pname2=(char*)malloc(100);strcpy(to->pname2, from->pname2);}
完整代码:
#include<stdlib.h>#include<stdio.h>#include<string.h>#include<ctype.h>typedef struct Teacher{char name[64];int age;char*pname2;}Teacher;//如果想执行深copy 应该显示的分配内存void copyTeacher(Teacher*to,Teacher*from){//*to=*from;memcpy(to,from,sizeof(Teacher));//如果想执行深copy 应该显示的分配内存to->pname2=(char*)malloc(100);strcpy(to->pname2, from->pname2);}void main61(){Teacher t1;Teacher t2;strcpy(t1.name, "name1");//t1.pname2 是个指针 给指针直接赋值常量值是不可取的 所以必须先明确指针的指向 //给指针所指向的空间赋值 而不是给指针赋值t1.pname2 = (char*)malloc(100);strcpy(t1.pname2, "ssss");//t1 copy t2copyTeacher(&t2, &t1);//释放内存if (t1.pname2 != NULL){free(t1.pname2);t1.pname2 = NULL;}if (t2.pname2 != NULL)//如果是浅拷贝的话 这个地方是会断掉的 因为指针所指向的内存空间已经被上面释放</span></strong><span style="color:#cc6600;">{free(t2.pname2);t2.pname2 = NULL;}printf("hehehe\n");system("pause");return;}
函数说明:
void *memcpy(void *dest, const void *src, size_t n);
//从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
0 0
- 【C语言提高41】结构体的浅copy和深copy
- 结构体的浅copy和深copy
- C/C++学习之C提高-----结构体定义、初始化、引用、结构体做函数参数、结构体数组、结构体中套一级/二级指针、结构体深copy和浅copy
- OC的深Copy和浅Copy
- 深copy和浅copy
- 深copy和浅copy
- 【C语言提高17】字符串copy
- c 语言字符串的copy
- OC 中 浅 copy 和 深 copy
- python 深copy和浅copy
- js浅copy和深copy
- python 浅copy 和 深copy
- 深copy,浅copy
- Java中类的引用Copy,浅Copy和深Copy
- C语言copy文件
- Objective-c 的Immutable copy 和 Deep copy.
- copy和mutableCopy的深、浅拷贝
- 深copy 以及浅copy
- String[]转换List后增加元素
- js解析json文件数据
- Linux , Mozilla Firefox 安装adobe flash player插件
- 【ztree系列】节点的增删改
- 微信QQ分享回话
- 【C语言提高41】结构体的浅copy和深copy
- 如何在AS中使用lambda表达式
- 史上最简单的问题解决手册』读书笔记--如何更加了解自己
- 001_如何在官网下载Java JDK的历史版本
- c++设计模式(一)工厂模式
- 【LeetCode】169. Majority Element (多数投票算法 & 算法迁移能力)
- 程序员必知的8大排序(java实现)
- 一种日志采集装置和日志采集方法
- Flex仿Extjs局部遮罩(可带进度条)