当前位置:网站首页>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 .
边栏推荐
猜你喜欢
大学想要选择学习自动化专业,可以看什么书去提前了解?
[deep learning] semantic segmentation: thesis reading (neurips 2021) maskformer: per pixel classification is not all you need
Redis distributed lock implementation redison 15 questions
四川云教和双师模式
再有人问你数据库缓存一致性的问题,直接把这篇文章发给他
Download address of canoe, download and activation of can demo 16, and appendix of all canoe software versions
华南技术栈CNN+Bilstm+Attention
CANoe的数据回放(Replay Block),还是要结合CAPL脚本才能说的明白
机械工程师和电气工程师方向哪个前景比较好?
西南大学:胡航-关于学习行为和学习效果分析
随机推荐
嵌入式开发比单片机要难很多?谈谈单片机和嵌入式开发设计经历
CAPL script printing functions write, writeex, writelineex, writetolog, writetologex, writedbglevel do you really know which one to use under what circumstances?
Nc29 search in two-dimensional array
单片机如何从上电复位执行到main函数?
大学C语言入门到底怎么学才可以走捷径
Several silly built-in functions about relative path / absolute path operation in CAPL script
Listen to my advice and learn according to this embedded curriculum content and curriculum system
CANoe下载地址以及CAN Demo 16的下载与激活,并附录所有CANoe软件版本
CAPL 脚本打印函数 write ,writeEx ,writeLineEx ,writeToLog ,writeToLogEx ,writeDbgLevel 你真的分的清楚什么情况下用哪个吗?
通过bat脚本配置系统环境变量
面试突击62:group by 有哪些注意事项?
Regular expressions are actually very simple
South China Technology stack cnn+bilstm+attention
宝塔的安装和flask项目部署
Why data Tiering
CAPL script pair High level operation of INI configuration file
Download address of canoe, download and activation of can demo 16, and appendix of all canoe software versions
Zsh configuration file
四川云教和双师模式
CANoe的数据回放(Replay Block),还是要结合CAPL脚本才能说的明白