关于c语言中链表中的指针问题求助

发布于 2022-09-04 05:11:18 字数 460 浏览 14 评论 0

最近在学习c语言,看的是C primer plus书第6版,看到第17章节链表部分578页有些东西不太懂。

#define TSIZE 45
struct film
{
    char title[TSIZE];
    int rating;
};
typedef struct film Item;

typedef struct node
{
    Item item;
    struct node * next;
} Node;
typedef Node * List;

我想问的是如何理解这个List类型,我觉得List就是一个指向Node节点的指针啊,“List movies;”这句声明的意思是创建了一个指向Node节点的指针这样理解对吗?
void InitializeList(List * plist);这句原型的形参是指向指针的指针吗?为什么对形参的所有操作都要用指针的指针来表示,想了半天还是想不通。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

愿与i 2022-09-11 05:11:24

能不能把代码贴全?格式也乱七八糟,作为程序员这么马马虎虎,怎么写出漂亮的代码??
-----------edit-----------
首先,你之前的理解都没有问题,其实就是对指针理解还不到位。你把List当成一个普通的类型,比如struct, 来看,不要当成指针就好理解了。
任何一个数据结构尽管理论上是一样的,但是有千差万别的实现方法。比如你贴的这段,作为List肯定要有空和非空的判断方法,作者的意图就是如果List为NULL则空,否则非空。以指针作为形参的最大用处就是可以改变参数本身的值,并且传递到函数外面使用,也就是说明这个参数是用来作为输出使用的。而且很多公司的代码规范里要求,如果不是作为输出使用,参数不能使用指针,这样能极大提高代码的易读性。
在InitializeList和ListIsEmpty那两个函数中,作者肯定是要修改List所存储的内容,所以才用了指针。
List存储的是一个指针,而你现在就是要改变这个指针的值,并且把这个新指针传到函数外部,所以要用双重指针。
好比双层的俄罗斯套娃,你先把最里层那个忽略,当成一层来看,就好理解了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文