二級指標的用法

2021-06-29 02:48:52 字數 2731 閱讀 6818

1、二級指標(指向指標的指標)

那麼二級指標有什麼用呢?看乙個用二級指標實現的鏈棧和鏈佇列的例子

源**中各個檔案說明:

stack_queue.h檔案中存放結點的定義以及函式的宣告

stack.c檔案中存放棧的實現

queue.c檔案中中存放佇列的實現

stack_queue.h檔案:

[cpp]view plain

copy

"font-size:16px;"

>#ifndef stack_queue_h  

#define stack_queue_h

#include

#define error -10000

typedef

intnodetype;

//令結點型別為int型

//棧、佇列中結點的定義

typedef

struct

node  

node,*pnode;  

//鏈棧用帶頭結點的單鏈表實現

void

init_stack(pnode* top);

//初始化棧

nodetype pop(pnode* top);//彈棧

nodetype pep(pnode top);//取棧頂元素

void

push(pnode* top,nodetype data);

//壓棧

intstack_empty(pnode top);

//判斷棧是否為空

//鏈佇列用帶頭結點的迴圈單鏈表實現

void

init_queue(pnode* rear);

//初始化佇列

nodetype de_queue(pnode* rear);//出隊

nodetype get_queue(pnode rear);//取隊頭元素

void

en_queue(pnode* rear,nodetype data);

//入隊

intqueue_empty(pnode rear);

//判斷佇列是否為空 

#endif

stack.c檔案:

[cpp]view plain

copy

"font-size:16px;"

>#ifndef stack_c  

#define stack_c

#include"stack_queue.h"

//初始化棧,在建立乙個頭結點作為棧底元素,top是棧頂指標

void

init_stack(pnode* top)  

//出棧(要改變棧頂指標,棧頂指標下移,所以傳入的是乙個二級指標)

nodetype pop(pnode* top)  

return

error;  

}  //檢視棧頂元素(不需要對棧進行修改,所以不需要傳入二級指標)

nodetype pep(pnode top)  

return

error;  

}  //入棧,棧頂指標上移

void

push(pnode* top,nodetype data)  

//判斷棧是否為空(不需要對棧進行修改,所以不需要傳入二級指標)

intstack_empty(pnode top)  

#endif

queue.c檔案:

[cpp]view plain

copy

#ifndef queue_c

#define queue_c

#include"stack_queue.h"

//初始化佇列(建立乙個帶頭結點的迴圈佇列)

void

init_queue(pnode*  rear)  

//出佇列(注意當只有乙個元素時要改變佇列的尾指標)

nodetype de_queue(pnode * rear)  

else

return

error;  

}  //獲取對頭元素

nodetype get_queue(pnode rear)  

else

return

error;  

}  //入佇列(每次入佇列都要改變隊尾指標)

void

en_queue(pnode * rear,nodetype data)  

//判斷是否為空

intqueue_empty(pnode rear)  

#endif

test.c檔案(測試):

[cpp]view plain

copy

"font-size:16px;"

>#include

"stack.c"

#include"queue.c"

#include

void

main()  

總結:指標也是傳值傳遞,當我們要在被掉函式裡面改變呼叫函式一級指標的值時,就需要以二級指標作為引數。這種情況是經常碰到的,比如在鍊錶(無頭結點)操作時是通過鍊錶第乙個元素來找到其他所有鍊錶中的元素,如果刪除操作時刪除的正好是第乙個元素,那麼這時就要改變煉表頭指標的指向了。當然還有在二叉樹操作時當刪除的剛好是樹根結點,此時也要改變一級指標的指向。

指標與二級指標

int num 10 int p1 int p2 p1 指標的指向結構如下圖所示 0x4000 0x3000 p2 0x2000 p1 num p2 表示的是儲存p2指標的位址 p2 表示的是p2指向的位址,即指標p1存放的位址 p2 表示指標p2指向位址中所存的值,即指標p1指向的位址,即變數nu...

二級指標,指向指標的指標

test 函式的語句getmemory str,200 並沒有使str 獲得期望的記憶體,str 依舊是null,為什麼?指標傳遞 void getmemory char p,int num void test void 解釋 毛病出在函式getmemory 中,編譯器總是要為函式的每個引數製作臨時...

二級指標,指向指標的指標

我們先來看乙個例子 假設我們有第三個變數時 c b c的型別顯然是乙個指標,變數b是乙個 指向整形的指標 所以任何指向b的型別必須是指向 指向的指標 的指標,更通俗的來講就是指標的指標。它合法嗎?指標變數和其他變數一樣,佔據記憶體中某個特定的位置,所以用 操作符取得他的位址是合法的。這個變數宣告為 ...