双层指针的例子

本文介绍了C语言中如何定义和初始化一个单链表,包括struct定义的Book结构体,LNode结构体和LinkList指针类型。在StatusInitList_L函数中,使用双层指针LinkList*L来修改原始指针的值,动态分配内存并设置头结点。*L解引用操作用于访问和修改指针指向的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struct Book {
	string id;//ISBN
	string name;//书名
	double price;//定价
};
typedef struct LNode {
	Book data; //结点的数据域
	struct LNode *next; //结点的指针域C99标准下可以省略struct 
} LNode, *LinkList; //LinkList为指向结构体LNode的指针类型   *LinkList应该是 struct LNode* LinkList;定义一个LNode类型的指针
Status InitList_L(LinkList* L) {//算法2.6 单链表的初始化
	//构造一个空的单链表L
	*L = (LinkList)malloc(sizeof(LNode)); //生成新结点作为头结点,用头指针L指向头结点  头结点的数据存储在头指针里面。*L表示指针L内部寸的地址对应的值。 
	(*L)->next = NULL; //头结点的指针域置空
	return OK;
} 

在这里插入图片描述

在上述代码中,LinkList* L 是一个双层指针。让我们一行一行来解析和分析:

  1. typedef struct LNode { ... } LNode, *LinkList;

    这一行代码定义了一个结构体类型 LNode 和一个指向该结构体类型的指针类型 LinkList。这里的 *LinkList 表示 LinkList 是指向 LNode 类型的指针。

  2. Status InitList_L(LinkList* L)

    这里的参数 LinkList* L 表示 L 是一个指向 LinkList 类型指针的指针。通过使用双层指针,我们可以在函数内部修改原始指针的值。

  3. *L = (LinkList)malloc(sizeof(LNode));

    在函数的实现中,使用 malloc 动态分配内存空间,使得 *L 所指向的指针变量指向了分配的内存。在这里,*L 表示指针 L 内部存储的地址对应的值。

    (*L)->next 中的 (*L) 是对指针 L 进行解引用操作,访问其指向的 LinkList 类型的数据结构。(*L)->next 表示该数据结构中的 next 成员。

总结起来,由于需要在函数内修改原始指针的值,所以使用了双层指针 LinkList* L。通过使用 *L 解引用操作,可以访问并修改 L 指向的数据结构。

是的,在C语言中,int *p;int* p;是相同的。它们都声明了一个指向整型变量的指针 p。在C语言中,对于指针的声明,星号 * 可以放在类型名前面或者变量名前面,两种写法在语法上是等价的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九层指针

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

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

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

打赏作者

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

抵扣说明:

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

余额充值