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就可以了。路由...