C 语⾔中结构体的拷贝
顶
0版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。
结构体是⼀种,类似 C++的类。
结构体中 可能包含 很多种变量: (整型,浮点型,结构体,指针);
结构体在定义的时候请尽量保持:低字节变量在前,低字节变量在后,这样 可以提⾼代码质量和内存的利⽤率.(关于结构体的⼤⼩暂不讨论)设结构体 Data 如下:
结构体的浅拷贝可以直接采⽤a=b;就像普通的复制运算⼀样,没有任何问题.
为什么这么说呢?
⾸先:
c语言中structData 中没有指针,只有⼀个int ;⼀个 char; 在Data a,b 语句执⾏后;系统已为a,b 均分配好空间.
在b=a;语句执⾏后 编译器会⾃动的将a 的值赋给b 就像 执⾏了 b.A=a.A; b.B=a.B;⼀样;
之后 a 和b 就没有任何关系了. 结构体"拷贝"成功;
但以上结构体拷贝只能叫浅拷贝,或者说,在结构体⾥⾯没有指针时 浅拷贝 和 深拷贝 是没有任何不同的;
浅拷贝 就是 说 讲⼀个结构体⾥⾯的值完全赋给另⼀个结构体.
但当结构体中含有指针时:浅拷贝只会拷贝指针所指向的空间地址值;
⽽不会深层的⾃动额外分配空间,并拷贝空间内的值.
这样⼦的话,当b=a 赋值语句执⾏后,a 和b 中各会有两个指针指向同⼀个空间;
当a 中指针指向的空间被销毁后,b 中指针成野指针.调⽤指针值 和 释放指针时会出现异常,且不易排错.[cpp]
01. typedef struct Data{ 02. int A; 03. char B; 04. 05. }Data; 06. Data a,b; 07. a.A=4; 08. a.B ='A'; 09. b=a;
[html]
01. <pre code_snippet_id ="1990921" snippet_file_name ="blog_20161117_1_2180126"></pre> 02. <pre></pre> 03.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论