C指针--通过二级指针往回拉数据

现在有这种需求,在main函数中建立一个二叉树的root结点的指针,在tree_create函数中malloc或者new一个二叉树结点,然后在main函数中能正常的访问这个新建的结点。

注:这里的tree_create的返回值为void,也就是说不能通过函数的返回值返回指向结点的指针。

能想到的办法就是通过二级指针往回拉结点的数据。具体的实现流程是这样的:

void tree_create(tree **tmp);

int main(void)
{
	tree *T = NULL;//T是二叉树结点的指针

	//把T的地址传递给tree_create函数的tmp
	//传递的值放在tmp对应的内存单元中
	tree_create(&T);
}

这里也给出一种错误的方法,分析他们的内存的存储方式:

void tree_create(tree *tmp);

int main(void)
{
	tree *T = NULL;//T是二叉树结点的指针

	//把T的内容,也就是T对应的内存单元里的数据
	//这个数据要么是某个结点的内存地址,要么是NULL
	//把这个值传递给tree_create函数的tmp
	tree_create(T);
}

先来看错误的方式的内存的排布方式:

再来看正确的方式的内存的排布方式:

上面通过内存展示的方式,分析了通过二级指针回拉数据的工作方式。同时也把错误的方式展示了。

时间: 2025-01-01 11:44:59

C指针--通过二级指针往回拉数据的相关文章

指针数组,数组指针,指针函数,函数指针,二级指针详解

先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故定义了一个数组,数组里面的数据是char *的,所以数组里面的数据为指针类型.所以char *p[4]是四个指针,这四个指针组成了一个数组,称为指针数组,既有多个指针组成的数组. char(*p

关于一级指针和二级指针的简单见解

一级指针形式如: int *p二级指针形式如: int **p 可能很多初学者会疑惑在函数参数里面到底应该用一级指针还是二级指针. 下面用几个例子说明一下: 第一个是大家都很熟悉的链表 下面是一个链表结构:   typedef struct Node{ int value; struct Node *next;} 对于添加数据到链表尾部这个函数,传入的参数必须是一个二级指针. 在传参的时候发生的赋值动作是: Node *hNode;Node **pNode = &hNode; pNode指向了h

(C++)函数参数传递中的一级指针和二级指针

(C++)函数参数传递中的一级指针和二级指针 主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址: 二级指针:指向指针的指针,就是地址的地址: 如: int a=1; int *p=&a; // p为a变量的地址,通过*p可以得到a的值 int **q=&p; // q为p指针的地址,通过**q可以得到a的值 2.函数指针传递的例子 程序1: 1 2 3

C语言一级指针、二级指针、数组作为参数传递需要注意的若干问题

在C语言编程时,经常会用到指针或数组作为参数传递,但有时结果却并不是自己想要的.下面总结下指针.数组作为参数传递需要的问题. 一级指针与二级指针的使用范围: 一级指针存放变量的地址,指向的值是变量的内容.如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值: 二级指针存放一级指针的地址,指向一级指针.如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1. 在作为参数传递时什么时候用一级指针,什么时候用二级

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

C语言一级指针与二级指针

指针的概念 指针就是地址, 利用这个地址可以找到指定的数据 指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针 指针变量就是存储地址的变量 int *p1;// 申请了一个变量, 即在内存中开辟了一块内存, 存储数据 // 开辟了 8 个字节, 在 Mac 下 指针都占 8 个字节 使用指针, 实际上应该说成使用指针变量 1> 算术运算 +1 移动几个字节? 看类型: int *,  long *,  char * 2> 获得地址表示的数据 指针里面存储的是地址, 就可以将该地

一级指针以及二级指针

我想不大理解二级指针的根源是我对程序对堆栈的用法还不够深入了解. 采用一级指针最好是方便修改指针对象的值,采用二级指针最好是方便修改指针的值. #include <iostream> #include <stdio.h> using namespace std; class haha { }; void main() { haha *p(new haha); printf("%p\n", p);//一级指针的地址 printf("%p\n",

从一级指针到二级指针

昨天,写了一些关于一级指针的见解,那么这次我们再来看看二级指针的一些用法,也可以说是我自己的一些见解 所谓二级指针其实和一级指针差不多,一级指针是存储0级指针地址的变量,(一定要记住这一点:指针也是变量,编译器会给它分配内存空间,它的内存空间和它指向的内存空间是不同的,它的内存空间里只能存储空间地址:)所以二级指针就是储存一级指针地址的变量,或者说二级指针是指向一级指针空间的变量:还可以说是指向一级指针的指针: 那么下面我们来看代码: void changePointer(char **c) {

一级指针,二级指针,指针数组,数组和指针

指针和数组指针是个用来存放地址的变量:&arr表示整个数组:arr数组名表示首元素的地址:指针解引用即表示指针所指向的内容比如:char ptr="abcdef";ptr; //指针解引用即表示它所指向的内容,即abcdefptr; //ptr里保存的是字符串的地址2.一级指针一级指针就是指指针,里面放的就是元素的地址,我们可以通过访问元素的地址来找到该地址里存放的内容,即元素本身.比如:char str1[ ]={1,2,3,4,5,6,7};3.二级指针二级指针就是指向一级