對於二級指標的認識
今天在寫鏈棧實現括號匹配的時候遇到了乙個指標的問題。
我在main函式裡定義了乙個結構體指標,然後使用func(node *p)這樣的函式申明讓它去指向另乙個指標,然後程式就報錯了。
我除錯了一下午,都不知道到底錯在哪,以前寫鍊錶的時候一直都是這樣做的。然後我就把問題放在了csdn上讓萬能的網友來幫忙,於是就顛覆了我對指標的認識。我才發現還有func(node *p),func(node *&p),func(node **p)三種不同的用法。
#include#include#define true 1
#define false 0
typedef struct sqstack
sqstack;
void initstack(sqstack *s,sqstack **top)
void initstack(sqstack *s,sqstack **top)
void push(sqstack *s,sqstack *&top,char c)//入棧,先對原來的top賦值,然後再申請新空間,top指向新空間
int main()
如要將top指標在函式裡指向s,不能用
sqstack *top這樣的函式宣告,這樣的函式宣告不會真正修改主函式,只有
sqstack **top
這樣將指標的位址傳入函式將其修改才行,指標指向的物件為一級指標如swap函式,而需要在函式裡才說明指向的物件,需要傳二級指標。
所以以後不要用
sqstack *top
應該用
sqstack *&top
在主函式的形式都是一樣的。
而如果是
sqstack **top
那麼在主函式指標名前應該加&。在函式內應該用*p->成員。 對二級指標的初步認識
二級指標 如果乙個指標指向的是另外乙個指標,我們就稱它為二級指標,或者指向指標的指標。假設有乙個 int 型別的變數 a,p1是指向 a 的指標變數,p2 又是指向 p1 的指標變數,它們的關係如下圖所示 將這種關係轉換為c語言 int a 100 int p1 a int p2 p1 指標變數也是...
對於一級指標和二級指標理解
一級指標 include void print int p int main 執行結果 通過一級指標可以修改實參的值。實參就是在呼叫函式時傳給函式的引數,形參是實參的乙份臨時的拷貝,在被呼叫的函式中雖然值和實參的值一樣,分配的記憶體和實參不一致,函式呼叫開始時,形參被分配記憶體。隨著被呼叫函式執行結...
指標與二級指標
int num 10 int p1 int p2 p1 指標的指向結構如下圖所示 0x4000 0x3000 p2 0x2000 p1 num p2 表示的是儲存p2指標的位址 p2 表示的是p2指向的位址,即指標p1存放的位址 p2 表示指標p2指向位址中所存的值,即指標p1指向的位址,即變數nu...