C语言中结构体的拷贝

结构体是一种数据结构,类似 C++的类。

结构体中 可能包含 很多种变量: (整型,浮点型,结构体,指针);

结构体在定义的时候请尽量保持:低字节变量在前,低字节变量在后,这样 可以提高代码质量和内存的利用率.(关于结构体的大小暂不讨论)

设结构体 Data如下:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. typedef struct  Data{  
  2. int A;  
  3. char B;  
  4.   
  5. }Data;  
  6. Data a,b;  
  7. a.A=4;  
  8. a.B ='A';  
  9. b=a;  


结构体的浅拷贝可以直接采用a=b;就像普通的复制运算一样,没有任何问题.
为什么这么说呢?
首先:
Data中没有指针,只有一个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中指针成野指针.调用指针值 和 释放指针时会出现异常,且不易排错.


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <pre code_snippet_id="1990921" snippet_file_name="blog_20161117_1_2180126"></pre>  
  2. <pre></pre>  
  3.      
0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值