【发布时间】:2014-07-21 01:04:25
【问题描述】:
我在 youtube 上看过不同人的视频,现在我有点困惑
前两个[(1) (2)] 是没有 typedef 的相同类型,然后是两个[(3) (4)] 与 typedef 属于同一类型,但写法不同
请说明以下表示的结构是否有错误以及为什么用数字表示。我正在为所有这些格式分配编号
(1)
struct tag{
int number;
char *name;
float num;
};
main()
{
struct tag name;
name firstmember;
------code-------
return 0;
}
我看到的下一个类型和上面的一样,但是:
(2)
struct tag{
int number;
char *name;
float num;
}name;
main()
{
name firstmember;
------code-------
return 0;
}
接下来是使用带有 typedef 的结构:
(3)
typedef struct tag{
int number;
char *name;
float num;
}name;
main()
{
name firstmember;
------code-------
return 0;
}
typedef 与其他版本相同:
(4)
struct tag{
int number;
char *name;
float num;
};
main()
{
typedef struct tag name;
name firstmember;
------code-------
return 0;
}
如果上述任何示例有任何错误,请说明
最后这个疑问和上面的例子完全不同
如果我们不在 struct 后面加一个结构标签,然后这样做
(5)
struct {
int number;
char *name;
float num;
}tag;
main(){}
这个词'tag'是否仍然是结构标记,或者如果它在'}'之后,所以它现在是一个结构名称?它是什么?如果它变成了名字,为什么我们还要使用结构标签?
请仔细阅读我所有的疑问后回答这个问题
【问题讨论】:
-
tag是#5 中结构的一个实例。我不知道你为什么一直使用name就像它是前两个中的一种类型。 -
@chris 'tag' 是什么意思是结构的一个实例。上面写的其他结构格式都正确吗?
-
@chris 这个词“标签”现在仍然是其结构名称的结构吗?这就是我的困惑
-
它是一个对象。就像
int i;中的i是一个对象一样。只有#3 有效。 #4 在typedef中的tag之前缺少struct。 -
(5)
tag表示变量名。结构体没有标签时,无法创建其他对象。