為什么打印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對象本身,那么就可以用.來進行引用,像下面這兩個表達式值都是一樣的
?這也就是它報錯的原因
二叉樹內存節點分析
?
好了,祝你早安,午安,晚安。?