struct与typedef struct

来源:互联网 发布:淘宝怎么买翻墙 编辑:程序博客网 时间:2024/06/09 13:49

普通结构体声明时使用只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应该是高层次的意义,即一个链表

0 0
原创粉丝点击