c的二级指针
----"c 语言的精华在于指针的灵活性。学好指针的目的在于尽可能少的使用指针。"
在敲binary search tree(二叉查找树),遇到了问题。在删除的时候,如果删除的是root节点,那么要改变根节点的地址,在实现时会非常卵痛。后来发现有一种好的方法就是使用二级指针,这样可以轻松改变root节点的地址。我只需要改变指向root节点的指针的指针中的所存的地址就好了。为了搞明白二级指针,做了一下实验:
typedef struct Tree_Node
{
int val;
Tree_Node *left, *right, *parent;
Tree_Node(int x)
{
val = x;
left = NULL;
right = NULL;
parent = NULL;
}
}Node, *PNode;
int main()
{
Node x();
cout<<&x<<endl;
Node *p = &x;
cout<<&p<<" "<<p<<" "<<p->val<<endl;//&p : p自己的地址 p : 指向(x)的地址 p : 指向地址处(x)val值
Node **pp = &p;
cout<<&pp<<" "<<pp<< " "<<(*pp)<<" "<<(*pp)->val<<endl;//&pp : pp自己的地址 pp : 指向(p)的地址 *pp : 取出pp所存(p)地址处的值(&x)
//可以看到 PNode 实际上就是一个 Node*, 那么这里pnode就是一个(Node**)也就是一个指向p(一级指针)的二级指针
PNode *pnode = &p;
cout<<&pnode<<" "<<pnode<< " "<<(*pnode)<<" "<<(*pnode)->val<<endl;
return ;
}
最后完成了搜索二叉树的一些基本操作。附上gitlab仓库链接:git@gitlab.com:luntai/algorithm.git
c的二级指针的更多相关文章
- 对线程等待函数pthread_join二级指针参数分析
分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...
- 【C】二级指针探秘 & 星号的两种用法(1.与基本类型结合形成另一种类型,比如与int结合形成int* 2.取值操作)
1)问题:二级指针到底是什么?怎么用的?怎么存放的? #include <stdio.h> #define TEST_ADDR 0x12FF40 void main() { int a = ...
- C语言一级指针与二级指针
指针的概念 指针就是地址, 利用这个地址可以找到指定的数据 指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针 指针变量就是存储地址的变量 int *p1;// 申请了一个变量, 即在 ...
- C++二级指针第二种内存模型(二维数组)
C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4 ...
- C语言 二级指针内存模型混合实战
//二级指针内存模型混合实战 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #i ...
- C语言 二级指针内存模型③
//二级指针内存模型③ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #incl ...
- C语言 二级指针内存模型②
//二级指针第二种内存模型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #incl ...
- C语言 二级指针内存模型①
//二级指针第一种内存模型 #include<stdio.h> #include<stdlib.h> //说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素 ...
- Linus:利用二级指针删除单向链表
Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...
- 【转】Linus:利用二级指针删除单向链表
原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...
随机推荐
- jQuery下拉列表操作(转)
转地址:http://www.cnblogs.com/yaoshiyou/archive/2010/08/24/1806939.html jQuery获取Select选择的Text和Value:语法解 ...
- Docker website
https://github.com/docker/labs/ (nguo123gmail Cooooos123!) Docker Tutorials and Labs At this time ...
- WINDOWS下调用GetTokenInformation的奇怪之处--两次调用
就是用getLastErr可以得到错误号,同时,会将需要的长度写到参数里,再进行第二次调用,以此来节约内存空间. 神奇的长见识了. 相关说法如下: ====================== The ...
- angularjs 过滤多组数据
<html> <head> <script src="angular.min.js"></script> <script ty ...
- 微軟将弃用 System.Data.OracleClient
http://www.cnblogs.com/WizardWu/archive/2010/05/17/1737009.html 微軟将从 .NET 4 以后的版本弃用 System.Data.Orac ...
- 怎样在Linux下使用Markdown进行文档工作
怎样在Linux下使用Markdown进行文档工作 在Linux系统中,编辑markdown能够用retext工具: sudo apt-get install retext retext Releas ...
- 每日一支TED——弗兰斯·兰庭:为动物发声的摄影作品——2015年6月3日
今天是听TED的第11天,从今天開始简单写一下听TED的感受! 刚把得! 弗兰斯·兰庭从一个部落得到一个思想说:全部的动物都是一样的.虽然他们的外形不一样.可是内在确实一样的,他们在外面伪装,可是他们 ...
- 最简单的基于FFmpeg的移动端样例:Android HelloWorld
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 阿里大数据比赛sesson2_RF&GBRT(下)
-----------__-----------接上文---------__---------- 2.Xlab RF上手 2.1.训练特征表准备 训练的特征表gbrt_offline_section_ ...
- JPush 初始化失败,直接按照官方文档的格式写的,portal上的包名肯定不会错,mainfest里面直接指定${applicationId}
错误日志: 11-27 09:59:19.670 26124-26124/? D/dalvikvm: Late-enabling CheckJNI 11-27 09:59:20.008 26124-2 ...