首页 > 代码库 > 关于指针和链表中的一些问题

关于指针和链表中的一些问题

 

学习数据结构时对指针和链表很迷糊,也就自己总结 一下,如果有错误或者理解上的错误欢迎指正,谢谢

指针

指针是什么,指针就是指针类型,就和int 类型,float类型等一样,而对于指针个人当时学习的时候总被*弄得迷糊,

*的作用:

1:类型说明符,int*p,定义p是一个指向整型的指针变量,p就是这个地址,具体说明教科书有。所以有int *p;p=&a或者是int *p=&a;在这里时强调一点int* p,可以写成这种形式,是指p所指向的数据域是整型,

2:指针指向的值的运算

3:野指针

当定义一个指针变量后,需要对其进行初始化,p=NULL,或者p=&a;如果不将其初始化,那么p没有一定的指向,这时会有一定的危险,同时在调用free后,此时需要将指针p=NULL,如若不然,则此时的p为野指针,所以要将其p=NULL

 

链表Linklist L和Link *L的区别

1:L=(Linklist *)malloc(sizeof(lnode))对吗?

2:L=(Linklist)malloc(sizeof(lnode))对吗?

3:**L=(Linklist)malloc(sizeof(lnode))对吗?

首先看一下单链表的存储结构(参考严蔚敏的教材)

typedef struct lnode{

  Elemtype   data;

  struct  lnde *next;

  }lnode, *Linklist

首先Linklist 是什么?

Linklist是一个指针变量,指向lnode的结构体的指针变量,

Linklist L是什么?怎么去理解,我是这样理解的,我们学过了整型变量的定义 int a;a 是一个整型变量,同时我们可以理解Linklist L,定义一个变量L是Linklist型,此时的L 

也是一个指针变量,指向结构体Lnode,此时的L是个一级指针,同理Linklist *L,把L换成q是没有关系的,所以就变成了Linklist *q,同理*p是个指针变量,指向lnode,此时我们又回到了指针符号*的作用上,是取值运算,取p所指向的是个指针,也就是说指针p指向指针,所以此时的指针p是个二级指针

malloc用法:

(l类型*)malloc(sizeof(lnode))是系统分配一个大小为lnode的内存,并把这个内存的首地址转换为什么类型的指针,Linklist本身是一个指针,此时Linklist *则是一个二级指针

所以第一个不对

注第二个中的L是Linklist *L中的L

我们刚才说了此时的L是二级指针,所以也不正确

看第三个**L可以这样理解*(*L),

即为取值,所以第三个也不成立

二级指针和一级指针

一级指针指向数据域,而二级指针指向指针域,具体见书本

 

关于指针和链表中的一些问题