看板 C_and_CPP 關於我們 聯絡資訊
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
cahry: 你要的是類似這樣吧?http://codepad.org/RUOZaWs8 10/02 03:40
CumCumCum: 指標 10/02 08:32
kye8546: 可以過! 感謝 我會再多練習試試 10/02 12:02