关于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);这句原型的形参是指向指针的指针吗?为什么对形参的所有操作都要用指针的指针来表示,想了半天还是想不通。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
能不能把代码贴全?格式也乱七八糟,作为程序员这么马马虎虎,怎么写出漂亮的代码??
-----------edit-----------
首先,你之前的理解都没有问题,其实就是对指针理解还不到位。你把List当成一个普通的类型,比如struct, 来看,不要当成指针就好理解了。
任何一个数据结构尽管理论上是一样的,但是有千差万别的实现方法。比如你贴的这段,作为List肯定要有空和非空的判断方法,作者的意图就是如果List为NULL则空,否则非空。以指针作为形参的最大用处就是可以改变参数本身的值,并且传递到函数外面使用,也就是说明这个参数是用来作为输出使用的。而且很多公司的代码规范里要求,如果不是作为输出使用,参数不能使用指针,这样能极大提高代码的易读性。
在InitializeList和ListIsEmpty那两个函数中,作者肯定是要修改List所存储的内容,所以才用了指针。
List存储的是一个指针,而你现在就是要改变这个指针的值,并且把这个新指针传到函数外部,所以要用双重指针。
好比双层的俄罗斯套娃,你先把最里层那个忽略,当成一层来看,就好理解了。