C++ 给结构体赋值的问题
我现在定义了一个结构体,里面既有一般成员也有数组成员,像这样的:typedefstruct{intiMember;intarrMember[10];}MyStruct;在...
我现在定义了一个结构体,里面既有一般成员也有数组成员,像这样的:
typedef struct
{
int iMember;
int arrMember[10];
} MyStruct;
在主程序里我定义了两个这样的结构体变量:
MyStruct object1, object2;
中间程序忽略,object1 和 object2 里面都存入了相应的数据。
现在我想将 object2 中的所有内容复制到 object1 中,覆盖 object1 中的数据。
于是我写:object1 = object2;
之所以这样写,是因为考虑到以后结构体还可能会增加新的成员,为了保证不对程序结构做出较大改变,所以直接对结构体赋值,而不是对结构体中的各个成员分别赋值。
那么数组成员,也就是 object2.arrMember[],能够成功复制到 object1.arrMember[] 里去吗?
现在有三个假设:
①复制成功,且两个结构体对象分别占用自己的存储空间,即使再修改 object2.arrMember[] 里的数据,也不会对 object1.arrMember[] 中的数据造成影响;
②只是复制了地址,如果修改 object2.arrMember[] 里的数据,则 object1.arrMember[] 中的数据也会同时被改变,因为两者指向同一存储空间;
③出现内存引用错误信息。
结果会是哪一个呢? 展开
typedef struct
{
int iMember;
int arrMember[10];
} MyStruct;
在主程序里我定义了两个这样的结构体变量:
MyStruct object1, object2;
中间程序忽略,object1 和 object2 里面都存入了相应的数据。
现在我想将 object2 中的所有内容复制到 object1 中,覆盖 object1 中的数据。
于是我写:object1 = object2;
之所以这样写,是因为考虑到以后结构体还可能会增加新的成员,为了保证不对程序结构做出较大改变,所以直接对结构体赋值,而不是对结构体中的各个成员分别赋值。
那么数组成员,也就是 object2.arrMember[],能够成功复制到 object1.arrMember[] 里去吗?
现在有三个假设:
①复制成功,且两个结构体对象分别占用自己的存储空间,即使再修改 object2.arrMember[] 里的数据,也不会对 object1.arrMember[] 中的数据造成影响;
②只是复制了地址,如果修改 object2.arrMember[] 里的数据,则 object1.arrMember[] 中的数据也会同时被改变,因为两者指向同一存储空间;
③出现内存引用错误信息。
结果会是哪一个呢? 展开
展开全部
arrMember的本质是一个指针,赋值语句只将指针的值直接赋给相应的对象,即“浅拷贝”。
当你在释放该指针对应的内存的时候便会出现错误。
可以通过operator= 的重载来实现深拷贝操作。
当你在释放该指针对应的内存的时候便会出现错误。
可以通过operator= 的重载来实现深拷贝操作。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream>
using namespace std;
typedef struct
{
int iMember;
int arrMember[10];
} ms;
int main() {
// your code goes here
ms o1,o2;
o1.iMember=1;
o1.arrMember[0]=100;
o2.iMember=2;
o2.arrMember[0]=200;
o1=o2;
o2.iMember=9;
cout<<o1.iMember<<endl;
return 0;
}
编译通过,且输出是2,你的假设1是对的。
追问
对于结构体里的数组对象呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询