為什麼一定要使用二級指標,而一級為什麼就不行呢??

2021-10-19 15:49:29 字數 1154 閱讀 3409

為什麼一定要使用二級指標,而一級為什麼就不行呢??

不是說函式中傳遞指標,在函式中改變指標的值,就是在改變 實參中的資料資訊嘛???

額。。。其實吧,上邊說的也對,可問題就在這塊了。。。問題是,在建立二叉樹的過程中,不是改變了形參的值,而是: 改變了形參的指向;而推出該函式後,形參被釋放了,那麼為形參動態分配的空間,也就沒辦法釋放了,造成了記憶體洩露問題。。

舉個例子吧:

void get_vale1(char *pt)

void get_vale2(char **pt)

int main()

else

cout<

get_vale2(&pt); //這裡呢,傳遞的是二級指標,結果呢,就輸出了「sx_liang";

if( null==pt)

{cout<<"pt is null

什麼原因呢: 咱開始分析一下:

void get_vale1(char *m)//這裡呢,傳遞了乙個指標,此時,m和 實參 pt 的指向記憶體的同一塊空間,都指向了null;

m=(char *)malloc(strlen("sx_liang")+1); //此時呢,給m的重新開闢了一塊空間, 而實參pt 沒有變化,還指向null;

//就是這裡,m 和pt 已經沒有聯絡了,徹底變成了兩個指向不同的指標;

strcpy(m,"sx_liang");//退出函式時,因為m是區域性變數,在棧中分配的空間,那麼m自動銷毀,而在堆中為m分配的空間呢,洩露了,沒有被釋放;是個問題!

void get_vale2(char **m)//這裡呢,傳遞的是二級指標;此時,m 指向實參,而不是和實參一樣指向null;*m 此時才和pt相同,都指向了null;注意體會一下;

*m=(char *)malloc(strlen("sx_liang")+1);//在這裡呢,*m就是 實參pt ,給*m申請空間,就是在為pt 申請空間;注意體會了;

strcpy(*m,"sx_liang");//推出函式後,m銷毀,但是它申請的空間沒被釋放,但是該空間有pt 指向它,不擔心釋放問題;

額。。。到這裡了,應該就能明白為什麼 二叉樹的建立過程中 a 辦法要使用二級指標了吧。。。。一級指標,每次建立的節點,都沒有和頭指標root 聯絡起來,當然就沒辦法列印了, 而二級呢。。。呵呵。。。就ok了。。。。

就是這樣了。。。呵呵。。。

一級指標二級指標

例如 int p null int代表指標p指向的資料型別是int型,代表這是乙個指標變數,1 指標變數儲存的內容是指向的變數的位址 2 在使用sizeof判斷指標的位元組數時,在32位機器上為4個位元組,在64位機器上為了相容,仍然是四個位元組大小 3 小知識點,不同型別的指標除了指向的變數資料型...

一級指標與二級指標

如下圖所示,整型指標xptr指向變數x的位址。原始碼 include int main 實現方法一如下圖所示,先為二級整型指標ptr分配空間,然後賦值。原始碼 include include int main printf n return 0 執行結果 實現方法二 如下圖所示,先為二級整型指標pt...

一級指標和二級指標

通常用作函式的輸入引數,因為一級指標作為函式引數,在呼叫的時候,實參和形參是不同的記憶體空間,只是,這個記憶體空間存放的指標指向的是同一塊位址,所以形參在函式執行中可以訪問實參指向的記憶體空間,但是形參的指向的改變並不能影響實參。總結一句話 一級指標做函式引數,在函式內做形參做重新指向並 不會影響實...