普通结构体声明时使用只struct关键字,而链表需要typedef struct,比较疑惑他们之间的区别
(1) 在C中定义一个结构体类型要用typedef:
typedef struct Student
{
int a;
}Stu;
则声明变量是这种形式:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明。Stu实际上就是struct Student的别名。
另外这里也可以不写Student
typedef struct
{
int a;
}Stu;
则声明形式必须是Stu stu1;
2)在c++中定义一个结构体类型:
struct Student
{
int a;
};
于是就定义了结构体类型Student,声明变量时直接Student stu2
typedef struct Student2
{
int a;
}stu1;//stu1是一个结构体类型
struct Student
{
int a;
}stu2;//stu2是一个变量
注意带typedef关键字,其就为类型,不带就为变量
还应该注意的是,C++为了C程序员的习惯,保留了Struct关键字,但是其意义与Class相同,唯一的区别是Struct默认成员权限为public。
3) 链表的声明
//方式1
typedef struct ListNode
{
DataType data;
struct ListNode *next;
}Node,*LinkList;
//方式2
struct ListNode {DataType data; struct ListNode *next; }; typedef struct ListNode Node; typedef Node *Linklist;
//方式3
typedef struct ListNode {
DataType data;
struct ListNode *next;
}Node;
typedef Node *LinkList;
因为都有typedef关键字,所以后面声明的都是类型。其中Node与LinkList本质是一样的,只不过一个是Node类型结构体,一个是指向Node的指针。但是理解时LinkList应该是高层次的意义,即一个链表。