【C语言内功】 LInkList &L的辨析

前言
在这里插入图片描述
在复习数据结构的时候 看到这里LinkList &L十分疑惑

LinkList等价于LNode* ·········· LinkList &L就应该=LNode* &L 这种格式是啥?

若此时main函数中的实参是List_HeadInsert(&L),应该是用LNode** pL来接收,也就是LinkList* L接收,为什么会出现这种情况了?
·
·
·
·

Solution
经过高强度的百度 我终于在知乎上看到有人这样进行的地址传递
在这里插入图片描述
和以前接触到的完全不一样,以前是
在这里插入图片描述
·
·
·
·
·
·Conclude
所以就是说 他main函数中的实参就和我的完全不一样,他是List_HeadInsert(L)
直接可以用LinkList &L来接收,从而实现地址传递。
·
·
·
·
··

Query

因为我感觉我的c 语法已经打的很扎实了LinkList &L一眼错,传指针地址应该用二级指针接受嘛 应该是ListList *L接收,他反而搞了个LinkList &L 。
这到底是什么情况?有大佬解释一下吗?还可以这样进行地址传递的?难道是C++中的语法,所以我在学C里没有接触到?

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 C 语言中,Linklist 是链表的一种实现方式,通常用结构体表示节点,通过指针将节点串联起来。而 Linklist l 和 Linklist&l 都是指针类型,分别表示链表的头指针和头指针的指针。 具体来说,Linklist l 是指向链表头节点的指针,通常用于遍历整个链表。在函数中,如果需要修改链表的头指针,可以将 Linklist l 作为函数参数传递进去,通过修改该指针的值来实现链表的修改。例如: ``` void addNode(struct ListNode **l, int val) { struct ListNode *newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); newNode->val = val; newNode->next = *l; *l = newNode; } ``` 这段代码中,我们使用了 Linklist&l 类型的指针,它指向 Linklist l 指针的地址。在函数中,我们首先动态分配一个新节点的内存空间,然后将节点的 `val` 值设置为 `val`,将 `next` 指针指向当前的头指针 `*l`,最后将头指针 `*l` 指向新节点。 而 Linklist&l 则表示指向 Linklist l 指针的引用,通常用于函数返回链表头指针的值。例如: ``` struct ListNode* reverseList(struct ListNode** l) { struct ListNode *prev = NULL, *curr = *l; while (curr != NULL) { struct ListNode *next = curr->next; curr->next = prev; prev = curr; curr = next; } *l = prev; return *l; } ``` 这段代码中,我们使用了 Linklist&l 类型的指针引用,它指向 Linklist l 指针的地址。函数的返回值是链表的头指针 `*l`,在函数内部,我们使用 prev 和 curr 两个指针来实现链表的反转,最后将头指针 `*l` 指向反转后的链表头节点。 因此,Linklist l 和 Linklist&l 对于链表的操作有着不同的用途。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值