鱼C论坛

 找回密码
 立即注册
查看: 3261|回复: 5

[已解决]关于链表的结构指针描述的一点疑问

[复制链接]
发表于 2020-7-15 14:45:23 | 显示全部楼层 |阅读模式
7鱼币
请问一下这个链表是咋定义的,那个LinkList是头指针还是指向链表的指针呢
链表.png
本来我以为是指向链表的指针,但是后边的函数GetElem()和ListInsert()传递的参数分别是LinkList L和LinkList * L一下又给我整懵了
链表2.png 链表3.png
最佳答案
2020-7-15 14:45:24
时荒小先生 发表于 2020-7-15 15:53
啊?我主要是不懂这个
这句话不是说LinkList类型是是指向结构体Node的指针吗
那L 的声明也就表明L1是一 ...

你的代码不完整,我只能给出不失一般性地回答。


函数的参数使用 struct,还是指针,就是看,在函数内部是否需要修改传入的参数。
如果需要修改传入参数,就使用指针类型。

这是最基本的原则。

虽然 LinkList 本身是一个指针,但是,这个指针只能起到修改 Node 的作用,

如果希望一个函数可以修改 LinkList,则需要传入 LinkList* 。


PS: 有一种情况,不用显示传入指针也能修改变量
struct int_wrapper {
    int* value
};

在使用上面这个结构体类型的变量时
void foo(struct int_wrapper input);

虽然这个函数的输入类型不是指针,但因为数据结构中,有一个指针整型域,因此,在实际效果等同于
void foo(int* input)


最佳答案

查看完整内容

你的代码不完整,我只能给出不失一般性地回答。 函数的参数使用 struct,还是指针,就是看,在函数内部是否需要修改传入的参数。 如果需要修改传入参数,就使用指针类型。 这是最基本的原则。 虽然 LinkList 本身是一个指针,但是,这个指针只能起到修改 Node 的作用, 如果希望一个函数可以修改 LinkList,则需要传入 LinkList* 。 PS: 有一种情况,不用显示传入指针也能修改变量 在使用上面这个结 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-15 14:45:24 | 显示全部楼层    本楼为最佳答案   
时荒小先生 发表于 2020-7-15 15:53
啊?我主要是不懂这个
这句话不是说LinkList类型是是指向结构体Node的指针吗
那L 的声明也就表明L1是一 ...

你的代码不完整,我只能给出不失一般性地回答。


函数的参数使用 struct,还是指针,就是看,在函数内部是否需要修改传入的参数。
如果需要修改传入参数,就使用指针类型。

这是最基本的原则。

虽然 LinkList 本身是一个指针,但是,这个指针只能起到修改 Node 的作用,

如果希望一个函数可以修改 LinkList,则需要传入 LinkList* 。


PS: 有一种情况,不用显示传入指针也能修改变量
struct int_wrapper {
    int* value
};

在使用上面这个结构体类型的变量时
void foo(struct int_wrapper input);

虽然这个函数的输入类型不是指针,但因为数据结构中,有一个指针整型域,因此,在实际效果等同于
void foo(int* input)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-15 14:46:34 | 显示全部楼层
这个是《大话数据结构》里边的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-15 15:07:49 | 显示全部楼层
GetElem
语义表述为读取,不需要修改链表本身,因此,既可以接收指针类型,也可以接收非指针类型
ListInsert
语义表述为插入,属于写入操作,需要修改链表本身,因此需要指针类型。

当然,如果不需要修改头结点,即 i = 0 的情况,不给指针也行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-15 15:53:17 | 显示全部楼层
赚小钱 发表于 2020-7-15 15:07
语义表述为读取,不需要修改链表本身,因此,既可以接收指针类型,也可以接收非指针类型

啊?我主要是不懂这个
typedef struct Node * LinkList;
这句话不是说LinkList类型是是指向结构体Node的指针吗
那L 的声明
LinkList L1;
也就表明L1是一个LinkList类型的变量,即指向结点的指针。
然后又来了一个
LinkList* L2;
这个L2是不是指向LinkList类型的指针,也就是说这个L2是一个指向一个指向结点的指针的指针
emmmmmm。。。。再然后我就晕了这咋全是指针呀。。。。。
按前面说的,
LinkList L1;
LinkList * L2;
L1是指针,L2也是指针,如果不用修改链表的话传递L1, 需要修改链表的话传递L2, 难道L1表示的是链表,而L2表示的是指向链表的指针吗??
这么说我可以把链表看成是一个每个元素都是指针类型LinkList的数组, 而LinkList * 表示这个数组的。。。。
编不下去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-15 19:19:45 | 显示全部楼层
赚小钱 发表于 2020-7-15 16:19
你的代码不完整,我只能给出不失一般性地回答。

这下懂了,谢谢大哥
下次我会尽量描述的清楚一点的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-5 00:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表