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投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...
随机推荐
- Keil uVision “已停止工作”
之前一直受这个问题的困扰,但是因为只是下载程序,下载镜像文件完事就算了.随便keil挂掉. 今天要调试程序,发现开启调试keil就挂掉了,烦. 解决办法参见: http://218.244.144.1 ...
- Uva 10730 Antiarithmetic?
uva 10730 题意:给出一列数字,如果其中存在长度大于等于3的等差数列,输出no,不存在就输出yes 这道题标定了数列长度n,而且这n个数数据范围是从0到n-1,没有相同的数,这就给我们枚举提供 ...
- [luoguP2854] [USACO06DEC]牛的过山车Cow Roller Coaster(DP + sort)
传送门 先按照起点 sort 一遍. 这样每一个点的只由前面的点决定. f[i][j] 表示终点为 i,花费 j 的最优解 状态转移就是一个01背包. ——代码 #include <cstdio ...
- 数论结论 nefu 702
Given a prime p (p<108),you are to find min{x2+y2},where x and y belongs to positive integer, so ...
- codevs1005 生日礼物
题目描述 Description 9月12日是小松的朋友小寒的生日.小松知道小寒特别喜欢蝴蝶,所以决定折蝴蝶作为给小寒的生日礼物.他来到了PK大学最大的一家地下超市,在超市里,小松找到了n种可以用来折 ...
- 建立DJANGO的自定义TAG
DJANGO的TAG分为三类: • simple_tag : Processes the data and returns a string• inclusion_tag : Processes th ...
- Java实现打印功能-AWT Graphics2D
Java实现打印功能 用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Gra ...
- 登陆模块,这个是很重要的模块,有shiro和spring security专门的权限认证框架
登陆模块,这个是很重要的模块,有shiro和spring security专门的权限认证框架
- sizeThatFits and sizeToFit
http://liuxing8807.blog.163.com/blog/static/9703530520134381526554/ sizeThatFits and sizeToFit是UIVie ...
- fibonacci数列的题目——剑指Offer
https://www.nowcoder.net/practice/c6c7742f5ba7442aada113136ddea0c3?tpId=13&tqId=11160&tPage= ...