typedef struct 结构体定义 + 结构体内部引用 + &符号

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

关于在结构体内部引用:

在C语言中,当你定义了一个结构体类型(如struct LNode),并希望在该结构体的一个成员中引用该结构体类型的指针时,你需要使用struct关键字来明确指出这是一个结构体类型。这是因为C语言在编译时需要一个明确的类型标识符来识别类型,而在结构体类型名被定义之前,编译器无法知道LNode是一个类型名还是一个变量名或其他标识符。

typedef struct   
{  
    Elemtype data;  
    struct LNode *next;         
}LNode,*LinkList;


这里有几个关键点需要注意:

  1. 结构体定义与类型别名:这段代码首先定义了一个匿名结构体(因为它没有直接给出结构体名),然后通过typedef为这个匿名结构体创建了一个别名LNode,同时也为指向该结构体的指针类型创建了一个别名LinkList

  2. 结构体内部引用:在结构体定义内部,当你想声明一个指向该结构体类型的指针时,由于此时LNode这个别名还未被定义(它将在整个结构体定义完成后才通过typedef生效),因此你不能直接使用LNode *next。相反,你需要使用struct LNode *next来明确告诉编译器这是一个指向struct LNode类型的指针。

  3. 解决方案:如果你希望避免在结构体内部使用struct关键字,你可以通过先定义结构体类型名,然后再使用typedef来创建别名的方式来实现。例如:

struct LNode {  
    Elemtype data;  
    struct LNode *next;  
};  
typedef struct LNode LNode, *LinkList;


或者,你也可以在定义结构体时直接使用typedef,但结构体内部仍然需要使用struct关键字(因为别名是在整个结构体定义完成后才创建的):

typedef struct LNode {  
    Elemtype data;  
    struct LNode *next;  
} LNode, *LinkList;


这两种方式都是有效的,它们允许你在结构体内部引用该结构体类型,同时也在结构体定义之外提供了类型别名以便更方便地使用。

&符号

bool initList(LinkList &L){
    L=(LNode*)malloc(sizeof(LNode));//创建头结点
    L->next=NULL;//此时表为空 头结点的指针域为空
    return true;
}

在上述代码中,& 符号用于表示对变量 L 的引用(或更准确地说,是指针的地址传递)。在C或C++中,当你希望一个函数能够修改其参数所指向的内容时,你会使用指针或引用(在C++中)。由于这段代码是用C语言写的,所以它使用了指针。

函数 initList 的参数 LinkList &L 在C++中会被写成 LinkList& L,表示这是一个对 LinkList 类型(实际上是指向 LNode 结构体的指针)的引用。但在C语言中,没有直接的“引用”概念,所以我们使用指针来实现类似的功能。因此,在C语言中,函数的参数应该是 LinkList L(但这样函数内部对 L 的修改不会反映到函数外部,因为传递的是指针的副本),或者更常见的做法是使用指针的指针(LinkList *L)或者在这里直接使用指针(LinkList L 但通常通过传递其地址来修改它)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pranaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值