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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

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

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

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

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)這個(gè)函數(shù)要傳遞頭結(jié)點(diǎn)的二維指針,傳遞頭結(jié)點(diǎn)的一維指針可以嗎?

不可以。因?yàn)楹瘮?shù)里可能會(huì)改動(dòng)頭指針。如果只是傳入頭結(jié)點(diǎn)的一維指針,那么只能改變頭結(jié)點(diǎn)所指的內(nèi)容,當(dāng)我們想改變頭指針本身(例如將頭指針由原來(lái)的p1指針換到p2指針,即把P2指針作為頭指針)時(shí)就無(wú)法實(shí)現(xiàn)了。但傳入二維指針則可以改變頭指針本身,例如上面代碼中的*pHead = pNew把pNew作為頭指針,由于pHead是二維指針,相當(dāng)于把pHead所指的內(nèi)容變?yōu)閜New。在函數(shù)里改變一個(gè)指針?biāo)傅膬?nèi)容,出了這個(gè)函數(shù)后這個(gè)改變還是生效的,所以退出函數(shù)后*pHead仍為pNew。

再來(lái)看看如果傳入函數(shù)的是頭結(jié)點(diǎn)的一維指針會(huì)怎么樣:即addListNode(ListNode* pHead, int value),在函數(shù)里面通過(guò)pHead = pNew把pNew作為頭指針,但這一句只是把函數(shù)里的pHead改變了,退出這個(gè)函數(shù)后,函數(shù)外的pHead本身并未發(fā)生改變。(相當(dāng)于函數(shù)值傳遞方式)

下面舉個(gè)類(lèi)比的例子加以說(shuō)明,證明傳遞頭結(jié)點(diǎn)的一維指針并不能改變指針本身的值

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; }

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

?

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。