当前位置:网站首页>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 .
边栏推荐
- 安装OpenCV时遇到的几种错误
- Yarn organizational structure
- Programmation défensive en langage C dans le développement intégré
- Several ways of MySQL database optimization (pen interview must ask)
- CAPL 脚本对.ini 配置文件的高阶操作
- CAPL script printing functions write, writeex, writelineex, writetolog, writetologex, writedbglevel do you really know which one to use under what circumstances?
- 硬件工程师的真实前途我说出来可能你们不信
- Sichuan cloud education and double teacher model
- 13 医疗挂号系统_【 微信登录】
- Inject common SQL statement collation
猜你喜欢
大学想要选择学习自动化专业,可以看什么书去提前了解?
手把手教您怎么编写第一个单片机程序
Routes and resources of AI
面试突击62:group by 有哪些注意事项?
Keep these four requirements in mind when learning single chip microcomputer with zero foundation and avoid detours
Counter attack of noodles: redis asked 52 questions in a series, with detailed pictures and pictures. Now the interview is stable
If a university wants to choose to study automation, what books can it read in advance?
再有人问你数据库缓存一致性的问题,直接把这篇文章发给他
51单片机进修的一些感悟
Embedded development is much more difficult than MCU? Talk about SCM and embedded development and design experience
随机推荐
Mexican SQL manual injection vulnerability test (mongodb database) problem solution
Combined search /dfs solution - leetcode daily question - number of 1020 enclaves
CAPL script pair High level operation of INI configuration file
Several silly built-in functions about relative path / absolute path operation in CAPL script
[NLP] bert4vec: a sentence vector generation tool based on pre training
Regular expressions are actually very simple
cmooc互联网+教育
Carolyn Rosé博士的社交互通演讲记录
oracle sys_ Context() function
再有人问你数据库缓存一致性的问题,直接把这篇文章发给他
Single chip microcomputer realizes modular programming: Thinking + example + system tutorial (the degree of practicality is appalling)
为什么大学单片机课上51+汇编,为什么不直接来STM32
Configure system environment variables through bat script
寶塔的安裝和flask項目部署
Nc17 longest palindrome substring
美疾控中心:美国李斯特菌疫情暴发与冰激凌产品有关
CANoe不能自动识别串口号?那就封装个DLL让它必须行
A wave of open source notebooks is coming
tn-c为何不可用2p断路器?
Control the operation of the test module through the panel in canoe (Advanced)