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

查看:135
本文介绍了关于c语言中链表中的指针问题求助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

最近在学习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);这句原型的形参是指向指针的指针吗?为什么对形参的所有操作都要用指针的指针来表示,想了半天还是想不通。

解决方案

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

这篇关于关于c语言中链表中的指针问题求助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆