初始化順序棧時 SeqStack malloc sizeof SeqStack 中的 SeqStack 為什麼要再定義一遍型別?

2025-01-24 08:40:20 字數 3286 閱讀 4551

1樓:指尖笑話

在 init_stack(seqstack *&s)內只是為你傳入的結構體指標分配記憶體空間,並非是定義;

可以在main函式里直接分配記憶體空間,但別人這樣寫,思路和**結構層次分明,便於理解;

指標需要這麼大空間是因為結構體裡有乙個整形 陣列成員;

並非是指標裡有個top變數,是指標指向的結構體內定義了乙個top成員;

2樓:網友

引數型別:seqstack *,是seqstack結構的指標。

引數:&s, 是對外部指標的引用。

呼叫返回:為指標s分配了 max_size + size(int)的空間,同時指向該空間。空間包含的top初始化為0xffffffff(假設int長度4位元組)。

3樓:最大的寶寶

malloc用於在堆上申請所需的記憶體,其返回型別是乙個指向所需記憶體的void指標。我們需要把這個無意義的void型別轉換成實際在用的型別。在本例中,我們申請的記憶體實際上就是乙個seqstack結構,所以void指標就當轉成指向的seqstack的指標。

你混淆了「指標」和「指標指向的物件」這兩個概念,建議把指標的知識再看一看,這也說明你很少寫**,其實上機所能悟到的遠比看十遍書來得深刻。

4樓:網友

第二個不是定義,理解為轉換,將分配的位址轉換為seqstack

p=(pseqstack1)malloc(sizeof(seqstack1));

5樓:匿名使用者

這是c的動態記憶體分配,意友扮思是分配乙個seqstack1所佔位元組的儲存空間並返回分配的塵告激位址給指標p

c++裡的等價用new:派襪。

p = new seqstack1;

改:要先包含#include

pseqlink init()

pseqlink h= new (std::nothrow) seqlink;

if ( h ) h->next = 0

return h;

求教如下程式中涉及的指標主要是二級指標問題*ps = (seqstack *)malloc(sizeof(seqstack)); #include

6樓:網友

位址=(指標型別)malloc(長度(max*(seqstack的長度))

7樓:網友

你要問的問題是什麼?

c語言入棧出棧,出隊入隊問題

8樓:網友

int pop(seqstack *s,char *x)else

return 1;

通常,top指的位置是待壓入的空結點,所以top == 0時,棧為空,top == maxsize時,棧滿,故應該修改初始化函式,建議蟹蓋如下:

seqstack *initstack(void)

9樓:網友

使用char *x的意義何在 為何不前後一致 使用char x

求高手,幫忙解決個c語言的指標傳遞的問題!!是乙個用棧編寫的迷宮,seqstack定義的*s不能傳遞到主函式。

10樓:網友

是在沒辦法 你可以把 那個s宣告為全域性的 不就好了嗎。

c語言棧方面,出現一些錯誤,棧定義有點問題,搞不太懂

11樓:網友

int correct(char exp)//檢測是否匹配函式{int i,s,*e;

e=&s;seqstack*s=(seqstack*)malloc(sizeof(seqstack));

s->top=0;

把e=&s;放到seqstack*s=(seqstack*)malloc(sizeof(seqstack));後面去,c與cpp的不同是c要先在函式開頭全部定義好後才能操作,不能放中間定義。

int correct(char exp)//檢測是否匹配函式{int i,s,*e;

seqstack*s=(seqstack*)malloc(sizeof(seqstack));

s->top=0;

e=&s;這樣編譯就沒問題了。

12樓:網友

c中不能在**區定義變數,向前提一下就好了int i,s,*e;

seqstack *s=(seqstack*)malloc(sizeof(seqstack));//這樣就可以了。

e=&s; //這個下移。

c資料結構順序棧問題

13樓:網友

init_stack需要二級指標,一級指標好像不行,再試試。

用順序棧實現進位轉化,程式編譯沒錯,但執行到一半就會出現如圖情況,下面是我寫的程式,求大神指教!!

14樓:匿名使用者

#include

#include

#define stack_size 50typedef int stackelementtype;

typedef struct

seqstack;

此處作了修改,改成了引用。

int gettop(seqstack *s);

int push(seqstack *s,stackelementtype x);

int pop(seqstack *s);

int isempty(seqstack *s);

void convert(int n,int e);//函式宣告void initstack(seqstack *&s)int gettop(seqstack *s)int push(seqstack *s,stackelementtype x)

int pop(seqstack *s)}int isempty(seqstack *s)void convert(int n,int e)printf("轉換後的數字為:");

while(!isempty(s))

int main()

**寫得好好,厲害,問題上面已經改了,並且給出了註釋,就是initstack函式的引數型別不合適,需要定義為引用(c++語法),因為這個引數是要被改變的。

此處作了修改,改成了引用。

15樓:匿名使用者

訪問了無效的記憶體位址。

多寫一些printf來看看在哪行出的錯,,,或使用vc單步執行除錯~

Cintnintpnewint怎樣初始化

new int n 會申 復請一個n個int元素的內製存空間,相當於一個n個int元素的陣列bai,這個值會被賦值給dup i p為int 為元素的陣列,或zhiint 指標,其中p i 為p的第i個元dao素。於是這句話的意思就是,在p的第i個元素分配n個int元素的空間。其後可以使用p i 0 ...

指向類指標如何初始化,如何初始化一個指標陣列

需要定義一個類,然後再把類指標指向這個類的地址,也可以初始化為null,但是null指標只能呼叫不涉及類成員變數的類成員函式。示例 include using namespace std class test int get test a 1 b 2 public int a,b int main ...

路由器初始化後會怎麼樣 初始化後不用設定引數能直接上網嗎?

裡面的資料會被清空!不能直接上網的,需要設定上網帳號和密碼。初始化即恢復至出廠設定,不會怎麼樣。一般重新設定路由就行了,不用設定引數?那這個路由器 不菲吧?等於是出廠狀態。不能上網。一般的路由都會有設定嚮導的,你自己按著設定就可以了,你買路由也會附帶說明書的。一般把網絡卡設為自動獲取ip就可以了。路由...