關於棧初始化的二級指標使用問題
先附上**
#include#include#define stack_init_size 20
typedef struct bitnodebitnode,*bitree;
typedef structsqstack;
int initstack(sqstack *s)
(s->base[0])=malloc(sizeof(bitnode));
s->base[0]->zt=10;
printf("%d\n",(s->base[0])->zt);
//s->top=s->base;
//s->stacksize=stack_init_size;
return 1;}
int main()
先附上初始化棧的c語言測試**。
首先根據sqstack *t=malloc(sizeof(sqstack));
這一句**,建立了乙個sqstack結構體型別的指標並為其開闢空間(初始化)
見圖1。
由上圖可知,t是乙個sqstack型別的指標,它指向了乙個sqstack結構體a。
結構體a裡面存放了乙個二級指標base和乙個二級指標top。
bitree *base;
bitree *top;
bitree定義的是乙個指向bitnode型別的指標,而bitree *base即為二級指標。
s->base=
(bitree *
)malloc
(stack_init_size*
sizeof
(bitree)
);
由上面的**可以知道,此句**為base開闢了20個bitree型別的空間。
沒加下面這句**的時候
(s->base[0]
)=malloc
(sizeof
(bitnode)
);
我用下面這一行**進行訪問發現總是出現段錯誤的問題,因此使我發現了雖然為一級指標陣列開闢了空間,但其中存放的是指標,而指標去指向乙個節點仍需要為其開闢空間。這乙個問題是我在應用中經常會忽視的。
(s->base[0]
)->zt=
10;
在加入(s->base[0])=malloc(sizeof(bitnode));這句**之後,空間分配見下圖
這時候我們可以通過指標陣列中的一級指針對bitnode節點進行訪問。
由鍊錶初始化看C語言的二級指標
先來看c語言建立鍊錶 插入節點和遍歷鍊錶的一段 c include include typedef int elemtype typedef struct nodenode,linkedlist void init linkedlist linkedlist list void insert lin...
二級指標的使用
有時候,我們需要在函式體的內部申請記憶體空間並初始化,然後將內部申請的儲存空間交付給外部指標來引用,這時候,我們可以使用二級指標作為申請空間的函式的引數來實現。main.c檔案 include include include pragma pack push,1 typedef struct use...
關於二級指標的理解
include void main charp int i for i 0 i 4 i 首先我們要明白,如果定義乙個字串陣列a 4 其實就是乙個一級指標,放的是第乙個字元的首位址,a 1放的就是第二個字元的首位址。這個也不難理解,同理我們知道n是乙個二維指標n裡面放的是a 0 的位址,a 0 放的是...