当前位置:网站首页>C miscellaneous shallow copy and deep copy
C miscellaneous shallow copy and deep copy
2022-07-06 09:59:00 【Bright-SKY】
Catalog
Knowledge point 1【 Introduction of knowledge points 】
Knowledge point 2【 Deep copy 】
Knowledge point 1【 Introduction of knowledge points 】
1、 When there are pointer member variables in the structure , When copying structural variables , There is a difference between shallow copy and deep copy .
namely : In light copy , After copying, the pointer member variable in the two structure variables points to The same Address
Deep copy , After copying, the pointer member variable in the two structure variables points to Different Address

typedef struct
{
int num;
char *name;// Pointer variable as Member of a structure
}DATA;
void test01()
{
DATA data={100,"hehehehaha"};
printf("%d\n",sizeof(DATA));//8 byte
printf("num = %d\n",data.num);
// Pointer variable as a member of the structure Save the address of the space
printf("name = %s\n",data.name);
}2、 Pointer to the variable As a member of a structure Before operation There must be legal space
void test02()
{
DATA data;
printf("%d\n",sizeof(DATA));
printf("num = %d\n",data.num);
// Pointer to the variable As a member of a structure Before operation There must be legal space
//data.name = "hehe";
// to name Apply in advance A piece of Heap space
data.name = (char *)calloc(1,10);
strcpy(data.name,"hahaha");
printf("name = %s\n",data.name);
// If name Point to heap space Be sure to release
if(data.name != NULL)
{
free(data.name);
data.name = NULL;
}
}Schematic analysis :

3、 Pointer to the variable As a member of a structure Assignment between structural variables Easily lead to “ Shallow copy ” happen

void test03()
{
DATA data1;
DATA data2;
data1.num = 100;
data1.name = (char *)calloc(1,10);
strcpy(data1.name,"my data");
printf("data1:num = %d, name = %s\n",data1.num, data1.name);
// Pointer to the variable As a member of a structure Assignment between structural variables Easily lead to “ Shallow copy ” happen
data2 = data1;//“ Shallow copy ”
printf("data2: num = %d, name = %s\n",data2.num, data2.name);
if(data1.name != NULL)
{
free(data1.name);
data1.name = NULL;
}
if(data2.name != NULL)
{
free(data2.name);
data2.name = NULL;
}
}Running results There was a paragraph error

Knowledge point 2【 Deep copy 】

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
int num;
char *name;
}DATA;
void test01()
{
DATA data1;
DATA data2;
data1.num = 100;
data1.name = (char *)calloc(1,12);
strcpy(data1.name, "my data");
data2.num = data1.num;
// Is the structure variable apply Independent space
data2.name = (char *)calloc(1,12);
strcpy(data2.name, data1.name);
printf("data1:num = %d, name=%s\n", data1.num, data1.name);
printf("data2:num = %d, name=%s\n", data2.num, data2.name);
if(data1.name != NULL)
{
free(data1.name);
data1.name = NULL;
}
if(data2.name != NULL)
{
free(data2.name);
data2.name = NULL;
}
}
int main(int argc,char *argv[])
{
test01();
return 0;
}Running results :

Knowledge point 3【 summary 】
The premise is pointer variables As Member of a structure
Shallow copy : Two structural variables Medium Pointer members Point to Same stack space .
Deep copy : Two structural variables Medium Pointer members Point to Respective heap space .
边栏推荐
- 简单解决phpjm加密问题 免费phpjm解密工具
- 为什么大学单片机课上51+汇编,为什么不直接来STM32
- Defensive C language programming in embedded development
- Function description of shell command parser
- max-flow min-cut
- Contest3145 - the 37th game of 2021 freshman individual training match_ B: Password
- 硬件工程师的真实前途我说出来可能你们不信
- Day 5 of MySQL learning
- NLP routes and resources
- Regular expressions are actually very simple
猜你喜欢

A wave of open source notebooks is coming

Release of the sample chapter of "uncover the secrets of asp.net core 6 framework" [200 pages /5 chapters]

Several silly built-in functions about relative path / absolute path operation in CAPL script

docker MySQL解决时区问题

嵌入式開發中的防禦性C語言編程

面试突击62:group by 有哪些注意事项?

在CANoe中通過Panel面板控制Test Module 運行(初級)

MapReduce instance (VIII): Map end join

13 医疗挂号系统_【 微信登录】

Some thoughts on the study of 51 single chip microcomputer
随机推荐
单片机实现模块化编程:思维+实例+系统教程(实用程度令人发指)
Une grande vague d'attaques à la source ouverte
Download address of canoe, download and activation of can demo 16, and appendix of all canoe software versions
How does the single chip microcomputer execute the main function from power on reset?
Contest3145 - the 37th game of 2021 freshman individual training match_ C: Tour guide
jar运行报错no main manifest attribute
[deep learning] semantic segmentation: thesis reading (neurips 2021) maskformer: per pixel classification is not all you need
Installation de la pagode et déploiement du projet flask
Some thoughts on the study of 51 single chip microcomputer
Why data Tiering
简单解决phpjm加密问题 免费phpjm解密工具
South China Technology stack cnn+bilstm+attention
Embedded development is much more difficult than MCU? Talk about SCM and embedded development and design experience
Write your own CPU Chapter 10 - learning notes
Tianmu MVC audit I
Several silly built-in functions about relative path / absolute path operation in CAPL script
[flask] crud addition and query operation of data
华南技术栈CNN+Bilstm+Attention
17 medical registration system_ [wechat Payment]
Contrôle de l'exécution du module d'essai par panneau dans Canoe (primaire)