日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++链表插入节点函数为什么要传递头节点的二维指针

發(fā)布時間:2024/7/19 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++链表插入节点函数为什么要传递头节点的二维指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++鏈表插入一個節(jié)點的代碼如下:

struct ListNode {int m_value;ListNode * m_next; };void addListNode(ListNode** pHead, int value) {ListNode * pNew = new ListNode();pNew->m_value = value;pNew->m_next = NULL;if (*pHead == NULL){*pHead = pNew;}else{ListNode * pNode = *pHead;while (pNode->m_next != NULL){pNode = pNode->m_next;}pNode->m_next = pNew;} }

那為什么addListNode(ListNode** pHead, int value)這個函數要傳遞頭結點的二維指針,傳遞頭結點的一維指針可以嗎?

不可以。因為函數里可能會改動頭指針。如果只是傳入頭結點的一維指針,那么只能改變頭結點所指的內容,當我們想改變頭指針本身(例如將頭指針由原來的p1指針換到p2指針,即把P2指針作為頭指針)時就無法實現了。但傳入二維指針則可以改變頭指針本身,例如上面代碼中的*pHead = pNew把pNew作為頭指針,由于pHead是二維指針,相當于把pHead所指的內容變?yōu)閜New。在函數里改變一個指針所指的內容,出了這個函數后這個改變還是生效的,所以退出函數后*pHead仍為pNew。

再來看看如果傳入函數的是頭結點的一維指針會怎么樣:即addListNode(ListNode* pHead, int value),在函數里面通過pHead = pNew把pNew作為頭指針,但這一句只是把函數里的pHead改變了,退出這個函數后,函數外的pHead本身并未發(fā)生改變。(相當于函數值傳遞方式)

下面舉個類比的例子加以說明,證明傳遞頭結點的一維指針并不能改變指針本身的值

void changeHead(int* pHead){int b = 50;int* new_p = &b;pHead = new_p;cout << *pHead << endl; //50 }int main(int argc, char* argv[]) {int a = 100;int* pHead = &a;changeHead(pHead);cout << *pHead << endl; //100return 0; }

在上面這個例子中,我把pHead這個一維指針傳入changeHead(int* pHead)函數,在函數里把通過pHead = new_p把pHead本身改變?yōu)閚ew_p。可以看到函數里pHead所指的值為50,看似已經把pHead改變?yōu)閚ew_p,但出了函數外面后,pHead所指的值還是100。所以函數里只能改變指針所指的內容,如果要改變指針本身的值,必須傳遞二維指針,才能使改變生效。

?

總結

以上是生活随笔為你收集整理的C++链表插入节点函数为什么要传递头节点的二维指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。