我正在努力学习C而且我遇到了一些奇怪的东西:
struct
{
int i;
double j;
} x, y;
struct
{
int i;
double j;
} z;
Run Code Online (Sandbox Code Playgroud)
在这里,你可以看到我创建了两个struct在元素中相同的s.
为什么当我尝试分配x = z它时会产生编译错误但x = y不会?它们具有相同的内容,为什么我不能相互分配它们,无论如何?
我有什么方法可以做到这一点,所以我可以分配x = z?或者他们只需要是一样的struct.
任何C大师能指出我正确的方向吗?
Joh*_*kin 13
它们具有相同的内容,但类型不同.如果它们的目的是同一类型,那么简单typedef x z;.如果它们不是同一个东西,但恰好包含相同的字段,那么最好创建一个能够正确分配字段的单独函数.
我在C中声明结构的通常样式包括typedef,所以我忘了提它(抱歉!).这是语法:
typedef struct
{
int foo;
double bar;
} x;
/* Further down, if needed */
typedef x z;
Run Code Online (Sandbox Code Playgroud)
编译器不计算可能具有相同结构的结构之间的"类型等价",因此就其而言,第二结构与第一结构无关.
它可以执行x和y,因为它们是同时声明的.
你为什么要重新定义结构?您应该输入一次结构(例如,在H文件中)以使其成为实际类型,然后声明实例.
struct mystruct
{
int i;
double j;
};
struct mystruct x, y;
struct mystruct z;
Run Code Online (Sandbox Code Playgroud)
如果您打算在它们之间复制数据,则必须使用相同的标识声明它们.你有两个声明,它们对于编译器来说无关紧要,它们是两个不同的结构,并且编译器不应该检测它们的相似性.
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |