C 语言中 结构体的拷贝

本文介绍了C语言中结构体的拷贝,包括浅拷贝的概念。当结构体中不含指针时,浅拷贝与深拷贝效果相同。然而,如果结构体含有指针,浅拷贝只会拷贝指针地址,可能导致野指针问题,进而引起运行异常。理解这一点对于避免内存管理错误至关重要。
摘要由CSDN通过智能技术生成

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

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

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

设结构体 Data如下:

typedef struct  Data{
int A;
char B;

}Data;
Data a,b;
a.A=4;
a.B ='A';
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中指针成野指针.调用指针值 和 释放指针时会出现异常,且不易排错.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值