關於棧初始化的二級指標使用問題

2021-09-29 13:03:26 字數 1550 閱讀 3194

關於棧初始化的二級指標使用問題

先附上**

#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 放的是...