linklist L和lintlist *L的区别
来源:互联网 发布:微信签到抽奖源码 编辑:程序博客网 时间:2024/04/29 10:51
1
2
3
4
typedef
struct
Node{
int
elem;
struct
node * next;
}node,*LinkList;(真是很讨厌的格式)
structnode
{
int data;
struct node *next;
};
typedef struct nodePNode;
typedef struct node*Linklist;
对于LinkList L: L是指向定义的node结构体的指针,可以用->运算符来访问结构体成员,即L->elem,而(*L)就是个Node型的结构体了,可以用点运算符访问该结构体成员,即(*L).elem;
对于LinkList *L:L是指向定义的Node结构体指针的指针,所以(*L)是指向Node结构体的指针,可以用->运算符来访问结构体成员,即(*L)->elem,当然,(**L)就是Node型结构体了,所以可以用点运算符来访问结构体成员,即(**L).elem;
在链表操作中,我们常常要用链表变量作物函数的参数,这时,用LinkList L还是LinkList *L就很值得考虑深究了,一个用不好,函数就会出现逻辑错误,其准则是:
如果函数会改变指针L的值,而你希望函数结束调用后保存L的值,那你就要用LinkList *L,这样,向函数传递的就是指针的地址,结束调用后,自然就可以去改变指针的值;
而如果函数只会修改指针所指向的内容,而不会更改指针的值,那么用LinkList L就行了;
下面说个具体实例吧!
#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct Node{ ElemType elem; struct Node * next;}Node, * LinkList;
//初始化链表,函数调用完毕后,L会指向一个空的链表,即会改变指针的值,所以要用*L
void InitList(LinkList *L){ *L = (LinkList)malloc(sizeof(Node)); (*L)->next = NULL;}
//清空链表L,使L重新变为空链表,函数调用完后不会改变指针L的值,只会改变指针L所指向的内容(即L->next的值)
void ClearList(LinkList L){ LinkList p; while(p = L->next) free(p);}
//销毁链表L,释放链表L申请的内存,使L的值重新变为NULL,所以会改变L的值,得用*L
1 void DestroyList(LinkList *L) 2 { 3 LinkList p; 4 while(p = (*L)->next ) 5 free(p); 6 free(*L); 7 *L = NULL; 8 } 9 10 void main()11 {12 LinkList L = NULL;13 InitList(&L);14 ClearList(L);15 DestroyList(&L);16 }
阅读全文
0 0
- linklist L和lintlist *L的区别
- 链表中LinkList L与LinkList *L的区别
- 链表中LinkList L与LinkList *L的区别
- 链表中LinkList L与LinkList *L的区别以及(*L).elem,L.elem L->next,(*L)->next的区别
- 用struct LNode *L与LinkList &L的区别
- MB/L和HB/L的区别
- Makefile 里 -l和-L的区别
- Makefile 里 -l和-L的区别
- gcc 后 -l 和 -L的区别
- Makefile 里 -l和-L的区别
- 数据结构链表中LinkList& L中&的作用
- T()和L的区别
- _T 和 L 的区别
- _T和L的区别
- transpLinkList(LinkList *&L)
- 线性表初始化int InitList(LinkList *L)和int InitList(LinkList L)问题
- 【Dongle】【数据结构】Linklist L、Linklist *L、Node *p 和Node p
- 对LINKLIST &L写法存疑
- Oracle日期、字符串格式化函数,位数不足前面加0,一位数字显示两位,格式化数字为定长
- CentOs6.5虚拟机的创建
- 关于JavaScript函数的参数按值传递而不是按引用传递的分析
- 169. Majority Element
- faster-rcnn在win10+cuda8.0+vs2013+matlab2016a下的配置
- linklist L和lintlist *L的区别
- java工厂模式
- 【拜小白opencv】32-平滑处理5非线性滤波之——双边滤波
- 量子雷达
- fabric源码解析15——peer的gossip服务之散播
- Dom 文档对象模型
- 泛型
- 数据结构第二周项目函数传递三种方法(2)指针
- python情感词分析