C语言--typedef struct与struct定义结构体的区别

版权声明:本文为博主原创文章,如需转载请注明出处。 https://blog.csdn.net/GOGOmusic/article/details/80294947

我在很多C语言代码中看到很多定义结构体时使用typedef struct,而不适用struct,就了解了这样做的原因:

typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。
具体区别在于:
(1)若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;
(2)若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;
区别就在于使用时,是否可以省去struct这个关键字。

=========================================================

定义结构变量的一般格式为:

struct 结构名
{
    类型 变量名;
    类型 变量名;
    ...
} 结构变量;

结构名是结构的标识符不是变量名。

另一种常用格式为:

typedef struct 结构名
{
    类型 变量名;
    类型 变量名;
    ...
} 结构别名;

===========================================================

分两块来讲述:
1 )首先:
在C中定义一个结构体类型要用typedef:

typedef struct Student
{
    int a;
}Stu;

于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明,这里的Stu实际上就是struct Student的别名。
另外这里也可以不写Student(于是也不能struct Student stu1了)

typedef struct
{
    int a;
}Stu;

2)如果在c程序中我们写:

typedef struct
{
    int num;
    int age;
}aaa,bbb,ccc;

这算什么呢?我个人观察编译器(VC6)的理解,这相当于

typedef struct
{
    int num;
    int age;
}aaa;
typedef aaa bbb;
typedef aaa ccc;

也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。

猜你喜欢

转载自blog.csdn.net/GOGOmusic/article/details/80294947