关于建树以及建单链表时要使用二重指针的原因
来源:互联网 发布:修改屏幕分辨率软件 编辑:程序博客网 时间:2024/06/05 02:56
今天终于打算来处理下这个问题了,至于为什么有的时候形参要使用二重指针,尤其是在建树以及建立单链表的时候。
我们知道,在建立树节点以及建立链表的节点的时候,一般的教材里面是这样写
(Node *)malloc(sizeof(Node))
这里我认为就是为什么要使用二重指针的原因
int BTreeCreate(BTree **tp){ //构造方法,或者说构造顺序:从左子树开始构造 int x; scanf("%d",&x); if(x<0) { *tp=NULL;//指针为空,树节点中的某个指针为空 return 0; } //++++++++++++++++++++++++++++// *tp=(BTree*)malloc(sizeof(BTree));//将树节点中指针指向该地址空间 //++++++++++++++++++++++++++++// if(tp==NULL) return 0; (*tp)->data=x; BTreeCreate(&((*tp)->left)); BTreeCreate(&((*tp)->right)); return 1;}
下面看下类似于它的讲解,参考链接
http://blog.chinaunix.net/uid-26983585-id-3219788.html
http://www.2cto.com/kf/201312/261723.html
//这里呢,传递了一个指针,此时,实参M和形参pt指向内存的同一块空间,都指向了null;void get_Vale1(char *pt) {//正是因为这里又重新开辟了一块内存,此时呢,给形参pt的重新开辟了一块空间, 而实参M没有变化,还指向NULL;//就是这里,M 和pt 已经没有联系了,彻底变成了两个指向不同的指针; pt=(char *)malloc(strlen("sx_liang")+1); strcpy(pt,"sx_liang"); //退出函数时,因为M是局部变量,在栈中分配的空间,那么M自动销毁,而在堆中为M分配的空间呢,泄露了,没有被释放;是个问题!}//这里呢,传递的是二级指针;此时,pt指向实参,而不是和实参M一样指向null;*pt此时才和M相同,都指向了NULL;注意体会一下;void get_Vale2(char **pt){//在这里呢,*pt就是实参M ,给*pt申请空间,就是在为实参M申请空间;注意体会了; *pt=(char *)malloc(strlen("sx_liang")+1); strcpy(*pt,"sx_liang"); //退出函数后,pt销毁,但是它申请的空间没被释放,但是该空间有M指向它,不担心释放问题;}int main(){ char *M=NULL; get_Vale1(M); //看看,这里调用的过程中,传递的是一级指针; if( NULL==M) //额。。。。在这里呢,就会执行if 里边的信息了。。。 { cout<<"Mis NULL"<<endl; exit(1); } else cout<<M<<endl; get_Vale2(&M); //这里呢,传递的是二级指针,结果呢,就输出了“sx_liang"; if( NULL==M) { cout<<"M is NULL"<<endl; } else cout<<M<<endl;
0 0
- 关于建树以及建单链表时要使用二重指针的原因
- 关于二重指针的问题
- 内存。二重指针,指针的高级使用
- 二重指针以及多重指针的分析方法
- 指针数组和二重指针的等价使用
- C语言中二重指针和指针数组以及数组指针的测试
- C/C++的二重指针
- 二重指针的一个问题
- 关于函数指针的个人理解,uboot中二重函数指针的实例分析
- 树用链表实现(链表使用二重指针减少判断以及空间复杂度)
- 二重指针、指针引用的效果分析
- 关于函数调用的参数传递(数值,指针,二重指针)
- 关于函数调用的参数传递(数值,指针,二重指针)
- 二重指针
- 二重指针
- 二重指针
- 二重指针
- C/C++ 高质量编程--内存,二重指针,指针的高级使用解析 3
- RFID系统组成及其功能
- 2015最新站长seo优化技巧分享
- Oracle 11g数据库及PLSQL_Developer安装配置
- Gridland
- ios界面跳转总结(一)
- 关于建树以及建单链表时要使用二重指针的原因
- iOS: AFNetworking的简单封装和图片上传
- [leetcode]Intersection of Two Linked Lists寻找两链表的公共节点
- [LeetCode 147]Insertion Sort List
- java线程
- 20150325
- 如何实现servlet的单线程模式
- Android Service简介
- 运行struts2程序时核心加载包struts2-core-2.3.15.1.jar报严重错误