是否可以将结构的一个实例分配给另一个实例,如下所示:
struct Test t1;
struct Test t2;
t2 = t1;
我见过它适用于简单的结构,但它适用于复杂的结构吗?
编译器如何知道如何根据数据项的类型复制数据项,即区分int
和string?
发布于 2010-02-20 21:41:52
如果结构是相同类型的,则为是。把它想象成一个记忆副本。
发布于 2010-02-20 21:41:35
可以,结构支持赋值。但是,也存在一些问题:
struct S {
char * p;
};
struct S s1, s2;
s1.p = malloc(100);
s2 = s1;
现在,两个结构的指针都指向相同的内存块--编译器不会复制指向的数据。现在很难知道哪个结构实例拥有数据。这就是为什么C++发明了用户可定义赋值运算符的概念-您可以编写特定的代码来处理这种情况。
发布于 2010-02-20 21:44:36
这是一个简单的副本,就像您对memcpy()
所做的那样(实际上,一些编译器实际上会为该代码生成一个对memcpy()
的调用)。在C中没有“字符串”,只有指向一串字符的指针。如果您的源结构包含这样的指针,则会复制该指针,而不是字符本身。
https://stackoverflow.com/questions/2302351
复制相似问题