水深 发表于 2019-10-10 18:00:24

S1E46单链表问题

定义释放内存函数时用的
void releaseLibrary(struct Book **library)
{
        struct Book *temp;

        while (*library != NULL)
        {
                temp = *library;
                *library = (*library)->next;
                free(temp);
        }
}
其中->的作用我自己理解为结果返回结构体(*library)中next变量的地址,但是这样理解*library并不是被赋值为next的值而是next的地址,不知道哪里思路出来错,求指导。

jackz007 发表于 2019-10-10 18:21:17

本帖最后由 jackz007 于 2019-10-10 18:26 编辑

      通过结构体变量访问成员时,使用 . 操作符,例如,book . next,book 必须是一个结构体变量;通过结构体指针访问成员时,使用 -> 操作符,例如,pbook -> next,pbook 必须是一个指向结构体的指针。

      在本例中,struct Book ** library,library 是一个指向结构体指针的指针,那么,* library 就是一个指向结构体的指针。之所以传入 struct Book ** library,其目的是希望把函数中对 * library 的修改反馈到主函数。

水深 发表于 2019-10-10 22:15:59

jackz007 发表于 2019-10-10 18:21
通过结构体变量访问成员时,使用 . 操作符,例如,book . next,book 必须是一个结构体变量;通过结 ...

那next是指针嘛

水深 发表于 2019-10-10 22:19:37

jackz007 发表于 2019-10-10 18:21
通过结构体变量访问成员时,使用 . 操作符,例如,book . next,book 必须是一个结构体变量;通过结 ...

pbook -> next整体返回什么

jackz007 发表于 2019-10-10 22:40:43

水深 发表于 2019-10-10 22:19
pbook -> next整体返回什么

       next 本身是指针,只是它必须搭载在某一个结构体上,pbook -> next 是一个与 pbook 相同类型的变量,它们都是指向自身结构体类型的指针变量。

水深 发表于 2019-10-11 15:05:49

jackz007 发表于 2019-10-10 22:40
next 本身是指针,只是它必须搭载在某一个结构体上,pbook -> next 是一个与 pbook 相同类型的变 ...

我想问的是整体返回什么

jackz007 发表于 2019-10-11 15:44:56

本帖最后由 jackz007 于 2019-10-11 15:50 编辑

水深 发表于 2019-10-11 15:05
我想问的是整体返回什么

      什么叫整体?

      pbook -> next 看起来似乎很复杂,但实际上它和 a , b , c等其它的任何一个普通变量一样,就是一个变量而已,没有什么特别的地方。如果 pbook 指向第一个节点,那么,pbook -> next 指向第二个节点,pbook -> next -> next 又指向第 3 各节点,直到最后那个节点的 next 值为 NULL,链表就无法继续追踪了。

matrixgadener 发表于 2019-10-12 20:11:49

没有这么复杂,你看下结构体中next是什么就行了,一个指针(*p)既可以代表一个值,也可以代表地址(指针的指针),没有什么纠结的,存在即合理

水深 发表于 2019-10-13 08:46:45

matrixgadener 发表于 2019-10-12 20:11
没有这么复杂,你看下结构体中next是什么就行了,一个指针(*p)既可以代表一个值,也可以代表地址(指针的 ...

我疑惑的点是因为我们用scanf的时候第二个参数一般应该是指针,而我们给对象传递值的时候它需要放在第二个参数,这样我觉得我用了—>的话返回的是指针,但在其他情况下又有种变量名的感觉
页: [1]
查看完整版本: S1E46单链表问题