C语言,链表中,typedef定义指针的问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 02:58:51
typedef struct film
{
char title[45];
struct film * next;
}Node;

typedef Node * List;

书上的例子,一句说:List movies;movies是一个适合指向链表的指针。这句倒是好理解。

下面又说,“重要的一点是要考虑清楚如下声明,List movies;是在建立一个列表,而不是在建立一个指向节点的指针或是建立一个结构。”
(C Primer Plus中的)

不明白啊,那不就是建立的是一个指针吗???????

再建立一个链表是要再次分配内存的

意思是说,虽然从语法上来说,它确实完全就是建立的一个指针,但它的目的却是为了建立一个列表。
就是说,当程序员看到 List movies; 时,他眼中就不再是看到建立一个指向节点的指针或是建立一个结构,而是看到一个列表被建立了。

进一步解释,如果程序员这么写:
Node * movie_1;
这才是建立一个指针,它把 movie_1 完全当作一个指针;

程序员这么写:
List movies;
就表示他要把 movies 当列表用了,意思变了,代码好读了;

typedef Node * List; 这个语句与其说是定义了一个类型,不如说是一个注释,它用 List 这个单词注释了列表。

首先必须肯定一点,你说的确实是对的。从语法上看,这个定义确实就是定义了一个指针,因为list就是一个指针类型,而在实际的编程过程中,编译程序也确实会提示一个warning,要你对该指针做初始化。
所谓在建立一个列表,是从应用角度来看的。告诉你这个程序在具体的应用中目的是建立一个列表,列表里存放title。

你可以这样理解:你要做一个电影名称的列表。那方法多去了。
可以建一个word文档,命名为list movies;
可以建一个excel,命名为list movies;
也可以建一个文本文档,命名为list movies;
还可以用链表程序来实现,节点的名称是list movies;
......

管他哪种方法,反正最后做出一个list就是了。他说“重要的一点是要考虑清楚如下声明,List movies;是在建立一个列表,而不是在建立一个指向节点的指针或是建立一个结构” 意思就是要你跳出语法角度,去看最终的应用目的 。

你不明白就是因为你只是在尽力理解语法,而没有考虑实际应用。
不知我说的你理解没有,可能我说的罗嗦了。