为什么打印root的值与&root->value的值是一样的呢
测试结果:
*号一个变量到底取出来的是什么?
以前我写过一句话,就是说,如果看到一个*变量,那就是直逼这个变量所保存的内存地址,然后取出里面保存的对应的值或者地址,
那么这句话该怎么来理解,可以这样讲
那么像上面打印的结果都是一样的,取出来的都是&num1的地址
下面上具体的代码说明:
#include <cstdio>
#include <cstdlib>using namespace std;int main()
{int num1 = 3;int *p_num1 = &num1;int **pp_num1 = &p_num1;int ***ppp_num1 = &pp_num1;printf("%d\n",*p_num1);//直逼num1,所以打出来是3printf("%d %d\n",*pp_num1,&num1);//直逼p_num1,取出来就是num1的地址printf("%d %d\n",*ppp_num1,&p_num1);//直逼pp_num1,取出来p_num1的地址//第一个*号直逼pp_num1,取出&p_num1地址//第二个*号直逼p_num1,取出&num1的地址printf("%d %d\n",**ppp_num1,&num1);//这里有两个**,一个*直逼pp_num1保存的地址就是p_num1,取出来是//&num1的地址,然后再来一个*,直逼num1的地址,取出来的就是3printf("%d\n",**pp_num1);return 0;
}
运行结果:
,&(*root)->left这个表达式为什么会报错
说这个之前,我们先来分析一下下面这些表达式的取值
表达式1:printf("%d %d %d %d\n",&(*root),root,&root->value,&root);
表达式2:printf("%d %d\n",&(*pp_root)->left,&root->left);
表达式3: printf("%d %d %d\n",(*pp_root)->left,root->left,&child->value);
再来说说,&(*root)->left它为什么报错
先来看一张图
再来分析上面首先*root是返回一个node对象本身,没有指针引用,因此->left编译器是会报错的
既然是返回node对象本身,那么就可以用.来进行引用,像下面这两个表达式值都是一样的
这也就是它报错的原因
二叉树内存节点分析
好了,祝你早安,午安,晚安。