c - 结构会自动分解到内存位置吗?

标签 c struct deep-copy

C 如何使用赋值运算符处理复制结构(而不​​是指向结构的指针)。我在下面有一个示例程序来演示我的问题。

struct s {
  char string[20];
};

void main() {
  struct s var1, var2;
  strcpy(var1.string, "hello");
  printf("var1: %s\n", var1.string);
  printf("var2: %s\n", var2.string);
  var2 = var1;
  printf("var1: %s\n", var1.string);
  printf("var2: %s\n\n", var2.string);
  strcpy(var2.string, "goodbye");
  printf("var1: %s\n", var1.string);
  printf("var2: %s\n", var2.string);
}

我期望的输出首先是“var1: hello var2:”,因为 var2.string 什么都不是。

第二个 block 应该是“var1: hello var2: hello”,因为 var1 和 var2 是相同的。

第三个 block 应该是“var1: goodbye var2: goodbye”,因为 var1 和 var2 应该是相同的内存位置。

不过,对于第三个 block ,我得到的是“var1: hello var2: goodbye”。所以看起来 var2 = var1 行自动将 var2 的所有属性设置为 var1 的属性。这是 C 所做的,而不是简单地将它们分解到内存中的位置吗?

最佳答案

The third block should be "var1: goodbye var2: goodbye", since var1 and var2 should be the same memory location.

不,var1var2 存在于不同的内存位置。

将一个结构的实例分配给另一个 blits(复制)源结构使用的内存区域到目标结构的内存区域。在这个操作之后,它们仍然是内存中的独立对象,您只是将所有成员的值从一个复制到另一个。

将来对一个对象的更改不会影响另一个对象,除非您将一个对象再次复制到另一个对象上。

关于c - 结构会自动分解到内存位置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036303/

相关文章:

python - 将对象的实例附加到列表仅适用于耗时的深度复制,我该如何更改它?

c++ - 我可以为 const 和非常量实例编写不同的 copyCtor 吗?

c - 卡在空格和数组中

c++ - 是否有用于 C 或 C++ 的高级形状绘图 API?

c - 如何将文本文件传递到c中的数组中?

c - K&R 练习 1.9 - 无限循环编程

c - 如何修改指向void函数内部结构的指针

c - 编译自定义 malloc.c 库时出现段错误

c 指向结构体的指针问题

c# - 如何创建我的列表集合的深拷贝