【C 语言】结构体 ( 结构体深拷贝 )
文章目录
- 一、结构体浅拷贝与深拷贝
- 二、结构体深拷贝
- 三、结构体深拷贝代码示例
一、结构体浅拷贝与深拷贝
结构体 中 嵌套了 指针 , 指针指向的内存 , 如果需要 malloc 在堆内存中 分配内存 , 如果在 该类型 结构体变量 之间互相赋值 ,
- 如果直接赋值 , 就是浅拷贝 ;
- 如果赋值时 , 重新为 指针变量 在堆内存中重新申请内存 , 拷贝数据 , 就是 深拷贝 ;
浅拷贝 只会 拷贝 指针变量的值 , 不会拷贝 指针变量 指向的 内存空间的 数据 ;
二、结构体深拷贝
结构体深拷贝 : 如果要实现结构体的深拷贝 , 需要在 浅拷贝 的基础上 , 重新为 指针 在堆内存中分配数据 ;
/*** @brief copy_student 执行深拷贝操作* @param to* @param from*/
void copy_student(Student *to, Student *from)
{// 结构体内存拷贝// 该拷贝是浅拷贝memcpy(to, from, sizeof (Student));// 结构体直接赋值 , 与上面的代码作用相同// 该拷贝也是浅拷贝//*to = *from;// 重新为 address 分配内存to->address = (char *)malloc(20);// 将 from 中的地址字符串数据 拷贝到 to 中strcpy(to->address, from->address);
}
三、结构体深拷贝代码示例
代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>/*** @brief The Student struct* 定义 结构体 数据类型 , 同时为该结构体类型声明 别名* 可以直接使用 别名 结构体变量名 声明结构体类型变量* 不需要在前面添加 struct 关键字*/
typedef struct Student
{// 声明变量时 , 会自动分配这 5 字节内存// 赋值时 , 可以直接使用 = 赋值字符串char name[5];int age;// 声明变量时 , 只会为 4 字节指针分配内存// 具体的 字符串内存 需要额外使用 malloc 申请内存// 赋值时 , 必须使用 strcpy 函数 , 向堆内存赋值char *address;
}Student;/*** @brief copy_student 执行深拷贝操作* @param to* @param from*/
void copy_student(Student *to, Student *from)
{// 结构体内存拷贝// 该拷贝是浅拷贝memcpy(to, from, sizeof (Student));// 结构体直接赋值 , 与上面的代码作用相同// 该拷贝也是浅拷贝//*to = *from;// 重新为 address 分配内存to->address = (char *)malloc(20);// 将 from 中的地址字符串数据 拷贝到 to 中strcpy(to->address, from->address);
}/*** @brief 主函数入口* @return*/
int main(int argc, char* argv[], char**env)
{Student s1;Student s2;// 为 s1.age 赋值s1.age = 18;// 为 s1.name 赋值// 该成员是 数组 , 在 s1 结构体变量声明时 , 就分配好了内存strcpy(s1.name, "Tom");// 给 s1.address 在堆内存分配内存s1.address = (char *)malloc(20);strcpy(s1.address, "Beijing");// 将 s1 赋值给 s2copy_student(&s2, &s1);printf("s1 : name = %s, age = %d, address = %s, %d\n", s1.name, s1.age, s1.address, &s1.address);printf("s2 : name = %s, age = %d, address = %s, %d\n", s2.name, s2.age, s2.address, &s2.address);// 命令行不要退出system("pause");return 0;
}
执行结果 :
s1 : name = Tom, age = 18, address = Beijing, 6422220
s2 : name = Tom, age = 18, address = Beijing, 6422204
请按任意键继续. . .
【C 语言】结构体 ( 结构体深拷贝 )相关推荐
- c语言结构体共用体枚举实例程序,10-C语言结构体-共用体-枚举
结构体是什么? 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的,而结构体是用于保存一组不同类型的数组 定义结构体 在使用结构体之前必须先定义结构体类型,因为C语言不知道你的结构体中需要 ...
- 【C 语言】结构体 ( 结构体浅拷贝 )
文章目录 一.结构体浅拷贝与深拷贝 二.结构体浅拷贝 三.结构体浅拷贝代码示例 一.结构体浅拷贝与深拷贝 结构体 中 嵌套了 指针 , 指针指向的内存 , 如果需要 malloc 在堆内存中 分配内存 ...
- 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )
文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...
- C语言如何获取结构体中指定元素的大小?sizeof ( (X*)0 ) -> Y)(空指针操作)
获取结构体的大小,这好办,这样就可以了: #include <stdio.h>struct user {char name[20];char age[10]; };int main() { ...
- C 语言实例 - 使用结构体(struct)
C 语言实例 - 使用结构体(struct)C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...
- Go语言基础之结构体
转载地址:https://www.liwenzhou.com/posts/Go/10_struct/ Go语言中没有"类"的概念,也不支持"类"的继承等面向对象 ...
- c语言 结构体 选择题,C语言结构体共用体选择题(新).doc
C语言结构体共用体选择题(新).doc 1.变量a所占的内存字节数是.(假设整型int为4字节) struct stu char name20; long int n; int score4; a ; ...
- 两个结构体变量可以直接赋值吗_Gox语言中的结构类型-GX6
Gox语言中,结构类型(struct)其实并不是很常用,因为Gox语言本身就是动态类型的语言,一般的类似结构体的数据直接用数组或者映射类型就可以了,里面的数据项可以是任意类型,包括嵌套复合类型.因此, ...
- c语言 结构体ppt,C语言知识学习结构体.ppt
C语言知识学习结构体.ppt Chap 9 结构,9.1 输出平均分最高的学生信息 9.2 学生成绩排序 9.3 修改学生成绩,本章要点,什么是结构结构与数组有什么差别 有几种结构的定义形式,它们之间 ...
最新文章
- 【CV】10种轻量级人脸检测算法大PK | 代码集合开源
- 从源码分析DEARGUI之动态特效
- 前端入行两年--教会了我这些道理
- java short后缀_自学java的新手问个问题,为什么写个代码中的int能自动转
- Win10笔记本可以搜索到邻居WiFi却搜不到自家的??
- 树莓派zero配置打印机
- RAC环境下配置TAF (Final)
- 创建 macvlan 网络 - 每天5分钟玩转 Docker 容器技术(55)
- Android手机打开开发者模式调试App
- 计算机制作贺卡教案,WORD电子贺卡制作的优秀教案_电子贺卡
- 解决Windows密码错误无法进入系统的问题
- NR、EN-DC等名词解释
- 吴裕雄--天生自然 高等数学学习:斯托克斯公式、环流量与旋度
- 【python】OpenCV—RGB, Rectangle, Circle, SS(1)
- 【AnySDK】项目实战教程
- 初入红尘不知人间疾苦
- fetchone()和fetchall()的准确读音
- 计算机领域的顶会、顶刊
- MathType的下载和安装以及添加到word中
- 什么样的故障让阿里云换了总裁?
热门文章
- 提升python运行效率_斗式提升机(TD、TH、NE型)
- java怎么让a取随机_数字连连看的java代码怎么把随机数改成字母啊ba title=个人悬赏 href=javascript:;20C/a/b...
- 怎么从转移特性曲线上看dibl_半导体器件原理chapter4.ppt
- E. Increasing by Modulo
- 小程序实现地图找房功能
- 【soliworks】安装soliworks2014
- 基于HTML+CSS绘制520情人节爱心飘落动画
- Android蓝牙初始名称修改(高通平台)
- Rockchip平台蓝牙名称随机化修改
- 高精度定位的几种解决方案