当前位置:网站首页>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 .
边栏推荐
- Installation of pagoda and deployment of flask project
- A new understanding of RMAN retention policy recovery window
- South China Technology stack cnn+bilstm+attention
- 美疾控中心:美国李斯特菌疫情暴发与冰激凌产品有关
- CAPL 脚本打印函数 write ,writeEx ,writeLineEx ,writeToLog ,writeToLogEx ,writeDbgLevel 你真的分的清楚什么情况下用哪个吗?
- 一大波開源小抄來襲
- [CV] target detection: derivation of common terms and map evaluation indicators
- 美新泽西州州长签署七项提高枪支安全的法案
- History of object recognition
- cmooc互联网+教育
猜你喜欢
51单片机进修的一些感悟
Redis distributed lock implementation redison 15 questions
15 医疗挂号系统_【预约挂号】
在CANoe中通过Panel面板控制Test Module 运行(高级)
CAPL script printing functions write, writeex, writelineex, writetolog, writetologex, writedbglevel do you really know which one to use under what circumstances?
What are the models of data modeling
max-flow min-cut
面试突击62:group by 有哪些注意事项?
Installation de la pagode et déploiement du projet flask
Nc29 search in two-dimensional array
随机推荐
Defensive C language programming in embedded development
手把手教您怎么编写第一个单片机程序
Hero League rotation chart manual rotation
Inject common SQL statement collation
如何让shell脚本变成可执行文件
Single chip microcomputer realizes modular programming: Thinking + example + system tutorial (the degree of practicality is appalling)
CAPL script printing functions write, writeex, writelineex, writetolog, writetologex, writedbglevel do you really know which one to use under what circumstances?
Zsh configuration file
Several silly built-in functions about relative path / absolute path operation in CAPL script
一大波开源小抄来袭
How can I take a shortcut to learn C language in college
[untitled]
Safety notes
A new understanding of RMAN retention policy recovery window
NLP routes and resources
宝塔的安装和flask项目部署
Which is the better prospect for mechanical engineer or Electrical Engineer?
Constants and pointers
Tianmu MVC audit II
Solve the problem of too many small files