1:typedef char DdataTpye;
2:typedef struct node
{
3: Datatype data;
4: struct node * next;
5:}ListNode,*list_p;
6:Typedef ListNode *LinkList;
我有如下问题
第一行 表示定义一个新的类型DdataTpye 以后凡是出现DdataTpye 就表示为char
我有点想不通 为什么不用char表示,这样表示更方便。
第二行 表示定义一个结构体 名字为node 前面加个typedef目的是什么
第三行 表示定义了一个类型为Datatype的变量data
第四行 定义了一个node型的指针 指针名叫next,这里的node就是第二行定义的结构体
有人说是结构体嵌套 但是我的疑问是 结构体的成员可能是int型 也可能是float型
指向结构体的指针可以指向不同类型吗
第五行 ListNode也是类型不是变量名 原因是前面加了typede 具体是为什么我也不清楚
死记硬背罢了 要有人能告诉我 感谢啊
第六行 我的理解是定义了一个新的类型*LinkList即是Listnode结构体 以后遇到*LinkList
就表示指向Listnode结构体
以上不知道是否正确 还请高手指点
首先指出你说错了:不是“新的”类型,而只是为“已有”的类型char起一个“别名”,就是说以后用char和用DdataTpye效果是完全一样的。为什么要这么做?一句话,写代码是有风格之说的,就是说有人喜欢那样而不喜欢这样;有人连{}都被用begain和end代替了,你说哪个方便?
不是问题1前面也有吗?它就是用来为这个结构体起“别名”的,它给结构体node模板起了两个别名,一个是对象别名ListNode,另一个是指针别名list_p。以后若要声明node的对象或指针a和pa,写ListNode a;和list_p pa;就可以了,而不必写成struct node a;和struct node *pa;了。当然写后者也是正确的。
理解正确。且就是char data;。
指向结构体的指针就是指向结构体的指针,结构体内部的变量结构无论多复杂,它的指针都包含这些信息。要注意,结构体指针是指向结构体整体的,不是指向其中某一变量的,访问是要用“结构体指针->就是名”形式才能操作到具体的变量。
你说对了,因为前面有typedef,所以ListNode成了struct node的别名,而不是struct node的变量;若没有typedef,ListNode就是变量了……这没有办法,C的语法规定,只好记住了,没有什么“理论根据”。
不是定义了一个新的类型,而是因为ListNode已经存在(第五行),为它起一下指针别名而已,以后要声明指向struct node的指针p就可以写LinkList p了。
另:书写多字少字,大小写错误较多,要注意啰……