c/c++开发分享为什么我不能互换地分配两个具有相同内容的结构?

我正在努力学习C而且我遇到了一些奇怪的东西:

struct { int i; double j; } x, y; struct { int i; double j; } z; 

在这里,您可以看到我创建了两个元素相同的struct

为什么当我尝试分配x = z时会产生编译错误但x = y不会? 它们具有相同的内容,为什么我不能相互分配它们,无论如何?

我有什么方法可以做到这一点,所以我可以分配x = z ? 或者他们只需要是相同的struct

任何C大师能指出我正确的方向吗?

    它们具有相同的内容,但类型不同。 如果它们的类型相同,只需输入typedef xz; 。 如果它们不是同一个东西,但恰好包含相同的字段,那么最好创建一个能够正确分配字段的单独函数。


    我在C中声明结构的通常样式包括typedef,所以我忘了提它(对不起!)。 这是语法:

     typedef struct { int foo; double bar; } x; /* Further down, if needed */ typedef xz; 

    使相同结构的类型相同称为“ 鸭子打字 ”。 这是用某些语言完成的,但不是用C.

    编译器不计算可能具有相同结构的结构之间的“类型等价”,因此就其而言,第二结构与第一结构无关。

    它可以执行x和y,因为它们是同时声明的。

    你为什么要重新定义结构? 您应该输入一次结构(例如,在H文件中)以使其成为实际类型,然后声明实例。

    这是一个关于结构的typedef的好教程。

     struct mystruct { int i; double j; }; struct mystruct x, y; struct mystruct z; 

    如果您打算在它们之间复制数据,则必须使用相同的标识声明它们。 你有两个声明,它们对于编译器来说无关紧要,它们是两个不同的结构,并且编译器不应该检测它们的相似性。

    C根据名称区分struct ,如果它们是匿名的,则不同的结构定义是不同的。

    无论如何,当xz是结构时,经典C不允许x = z – 是ANSI还是C99的添加? 无论如何,你应该改用

     #include  memcpy(&x, &z, sizeof(x)); 

      以上就是c/c++开发分享为什么我不能互换地分配两个具有相同内容的结构?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545870.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注