c和c++中,我想知道定义的struct和enum的变量名位置有什么不同?

拿结构体做例子:
struct 位置1
{
//code

}位置2;

我先列举一下struct的声明方法:
方法一:
struct test
{
//code
};

方法二:
struct Test2
{
//code

}test2;

方法三:
typedef struct Test3
{
//code

}test3;

我想知道,方法二中的位置1和位置二为毛要定义不同的名字(Test2和test2),
网上的教材都是这样的,但是没有说明白。
为什么要不一样?我一样会怎样呢?

方法2实际上是两条语句的结合。

分解开来是:
struct Test2
{
//code
};

Test2 test2;
即,先定义了一个结构体类型Test2,然后利用这个Test2创建了一个叫做test2的对象。

方法三也是两个语句的结合
typedef struct Test3
{
//code
}

typedef Test3 test3;
typedef是一种重定义的语法,也就是说test3实际上就是Test3. 两个是等价关系。
一般比较常见于类型的重定义。比如说在一些可移植的代码中,有这样的定义
typedef int INT
这样如果我们想创建一个int类型的对象,可以使用INT a = 10;的方式进行创建。

虽然看上去有点多余,但是在代码移植中,会起到非常重要的作用。
因为在各个平台中,int的大小是不一致的,有的是32位,有的是64位。
如果我们利用64位平台编译的代码,直接移植到32位上,很有可能发生数据溢出。
但是如果我们利用typedef int INT定义之后,只需要在移植后,稍微修改代码,就可以让代码中所有的INT类型变成其他类型,例如long。

如果我的回答能够帮助到你,希望能采纳我的回答。
如果还有其他疑问,可以继续追问。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-25
方法2中struct是结构体关键字,Test2是结构体名,test2是struct Test2型变量名。在这里因为C规定的类型名是struct Test2而不是Test2,所以把test2写成Test2也无妨,只是自己要清楚二者的不同。
你不是问Test2和test2为什么不同吗?我的回答告诉你写成一样也合法,可你选择一个答非所问的答案……
第2个回答  2014-07-24
struct就和class等价,唯一不同就是默认访问权限不同。c语言里struct必须要像方法二或三那样用,c++还可以用方法一。c里用方法一就是语法错误,c++里都可以用, 后两种用法可能就是为了兼容c,一般c++里用方法一。
第3个回答  2014-07-24

本回答被提问者采纳
相似回答