![]() |
1
126
如果结构类型相同,则为“是”。把它当作记忆复制品。 |
![]() |
2
121
是的,结构支持赋值。但是,也存在一些问题:
现在两个结构的指针指向同一个内存块-编译器不会复制指向数据的指针。现在很难知道哪个struct实例拥有数据。这就是为什么C++发明了用户可定义的赋值操作符的概念——你可以编写特定的代码来处理这种情况。 |
![]() |
3
21
首先看这个例子: 下面给出了一个简单c程序的c代码
foo_assign()的等效asm代码是
如您所见,在汇编中,赋值被“mov”指令简单地替换,赋值运算符只是意味着将数据从一个内存位置移动到另一个内存位置。 赋值只对结构的直接成员执行,当结构中有复杂的数据类型时将无法复制。这里complex意味着不能有指向列表的指针数组。 结构中的字符数组本身在大多数编译器上都不起作用,这是因为赋值只会尝试复制,而不会将数据类型视为复杂类型。 |
![]() |
4
15
这是一个简单的拷贝,就像你用
|
![]() |
5
6
你的意思是复数中的“复数”吗?这似乎不太可能,所以如果不可能,你必须举个例子,因为“complex”在c语言中没有任何具体的含义。 您将获得结构的直接内存副本;这是否是您想要的取决于结构。例如,如果结构包含指针,则两个副本将指向同一数据。这可能是您想要的,也可能不是您想要的;这取决于您的程序设计。 要执行“智能”复制(或“深层”复制),需要实现一个函数来执行复制。如果结构本身包含指针和也包含指针的结构,并且可能包含指向此类结构的指针(可能这就是您所说的“complex”)并且很难维护,那么这可能很难实现。简单的解决方案是使用C++并为每个结构或类实现复制构造函数和赋值运算符,然后每一个都为其自己的复制语义负责,可以使用赋值语法,并且更容易维护。 |
![]() |
cobb208 · Malloc正在为释放指针引发错误 2 年前 |
![]() |
kernel · 打印结构数组内容时出错 2 年前 |
![]() |
mwitz · 在Rust中无法正确写入结构的函数属性 2 年前 |
![]() |
Ulysses · 无法访问结构字段(Rust) 2 年前 |
![]() |
Tor · 使用Box<None>值初始化struct 2 年前 |
![]() |
Yestin · Golang如何初始化数组结构[duplicate] 2 年前 |