作者kye8546 (阿愷)
看板C_and_CPP
標題[問題] struct與函數的使用問題
時間Fri Oct 2 02:40:41 2015
C語言
新手學不久請見諒@@
最近在學資料結構
用struct嘗試把堆疊應用卻出了問題
首先結構是這樣:
struct Stack{
int top;
int items[100];
} s;
然後是push的函數:
void push(struct Stack s,char a)
{
s.top++;
s.items[s.top]=a;
}
程式能過但output卻不符合
debug後發現結構裡的東西在跑函數時會變動
但函數跑完一出去就回復原狀了
試過把struct Stack s打在main裡面但沒用
之前有遇過類似問題好像是call by value/address的關係
沒辦法之下有試過無腦加'*'和'&'等但都過不了...
網路上也查不到相關問題
想請教是哪邊出了問題...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.226.147
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1443724843.A.6F4.html
→ cahry: call by value跟call by address問題.你這樣寫是傳值進去 10/02 03:28
→ cahry: 如果這樣寫函式會在配置一記憶體給變數s所以變動內容不是 10/02 03:30
→ cahry: main函式所用的stack記憶體區塊,必須透過傳址進去改 10/02 03:31
→ cahry: 函式原型要改void push(struct Stack *s,char a)然後於裡面 10/02 03:33
→ cahry: s.top改為s->top, s.items[s.top]改為s->items[s->top] 10/02 03:33
→ kye8546: 我知道這個原理 不過不知道struct要怎麼改... 10/02 03:34
→ cahry: main更改部分就自己練習看看囉:) 10/02 03:34
→ kye8546: 用手機回太快了抱歉 我之後試試看 謝謝 10/02 03:35
→ CumCumCum: 指標 10/02 08:32
→ kye8546: 可以過! 感謝 我會再多練習試試 10/02 12:02