為什么在鏈表的刪除或者插入的操作中要用二級指針?

為什么在鏈表的刪除或者插入的操作中要用二級指針?

你好,其實這個問題我當時也迷糊了,后來想想其實也不難,呵呵,我們分析一下:如果用C語言描述單鏈表如下:typedef struct node{ DataType data;//節(jié)點的數(shù)據(jù)域 struct node *next;//節(jié)點的指針域}ListNode;typedef ListNode *LinkList;ListNode *p;//p是節(jié)點LinkList head;//head是頭指針注意**一句:\”LinkList head\”,這是定義了一個頭結點,前面已經(jīng)用typedef定義了LinkList,既“typedef ListNode *LinkList;”這句,這就說明LinkList head 定義后 head實際上是一個LinkNode類型的指針,這是我們單單看**兩句的定義而忽略其字面意思而言的話,p和head實際上是同一種類型的變量,都是ListNode類型的指針,只不過**一句LinkList類型是用typedef定義的,所以沒有“*”號。 因為刪除或者插入操作有時會修改實參的指針(比如頭結點為空的時候插入節(jié)點,這是就修改了頭結點),那么就必須將相應的形參說明為指針的指針,函數(shù)電泳時將實參指針的地址傳遞給相應的形參。

為什么鏈表操作時參數(shù)要用二級指針

你好,其實這個問題我當時也迷糊了,后來想想其實也不難,呵呵,我們分析一下:如果用c語言描述單鏈表如下:typedefstructnode{datatypedata;//節(jié)點的數(shù)據(jù)域structnode*next;//節(jié)點的指針域}listnode;typedeflistnode*linklist;listnode*p;//p是節(jié)點linklisthead;//head是頭指針注意**一句:\”linklisthead\”,這是定義了一個頭結點,前面已經(jīng)用typedef定義了linklist,既“typedeflistnode*linklist;”這句,這就說明linklisthead定義后head實際上是一個linknode類型的指針,這是我們單單看**兩句的定義而忽略其字面意思而言的話,p和head實際上是同一種類型的變量,都是listnode類型的指針,只不過**一句linklist類型是用typedef定義的,所以沒有“*”號。因為刪除或者插入操作有時會修改實參的指針(比如頭結點為空的時候插入節(jié)點,這是就修改了頭結點),那么就必須將相應的形參說明為指針的指針,函數(shù)電泳時將實參指針的地址傳遞給相應的形參。

c語言銷–毀鏈表為什么一定要用二級指針,新手求教

2種都是可以的. 只是二級指針會修改到頭節(jié)點. Destroy(head);// 使用此法,此時head的地址沒有被設置成NULL// Destroy(&head);// 使用此法,此時head的地址被設置成NULL以下是測試代碼. #include<stdio.h>#include<stdlib.h>struct StuNode{ int a; struct StuNode *next;};void Destroy(struct StuNode **ph) /*直接用*h的話*/{ struct StuNode*p; p=*ph;/*如果直接用p=h不行嗎?*/ while(p!=NULL) { *ph=p->next; free(p); p=*ph; } printf(\”已刪除\\n\”); *ph=NULL;} void Destroy(struct StuNode *h){ struct StuNode*p; p=h; while(p!=NULL) { h=p->next; free(p); p=h; } printf(\”已刪除\\n\”); h=NULL;} void main(){ int i; struct StuNode *head; struct StuNode *p = (struct StuNode*)malloc(sizeof(struct StuNode)); p->a =0百科; p->next = NULL; head = p; for(i=1;i<4;i++) { p->next = (struct StuNode*)malloc(sizeof(struct StuNode)); p->next->next=NULL; p=p->next; p->a = i; } Destroy(head);// 使用此法,此時head的地址沒有被設置成NULL// Destroy(&head);// 使用此法,此時head的地址被設置成NULL}

二叉樹建立為何引入二級指針?(詳細點)

那是傳遞動態(tài)內(nèi)存,你也可以用指針函數(shù)完成二級指針傳遞動態(tài)內(nèi)存void fun(int **p){ *p = (int *) malloc (int);//動態(tài)申請內(nèi)存}void main(void){ int *q = NULL; fun(&q);//這里相當于傳址,將p的地址傳給q,即q指向p,//相當于將指針p動態(tài)申請的內(nèi)存?zhèn)鬟f給指針q}建議你先把最基本的搞懂,再去學習復雜的

C語言中,為什么通過函數(shù)為指針變量分配內(nèi)存,形參一定要是二級指針?

我感覺沒有必要用二級指針,我們的目的主要是為了讓主函數(shù)中的指針的地址指向一個空內(nèi)存。我們完全可以通過傳遞這個指針的地址到子函數(shù)中,然后給這個指針的地址分配內(nèi)存就可以了。

例如下面這個程序就是正確的。

根本沒有必要使用到二級指針呀。