[問題] struct與函數的使用問題

看板C_and_CPP (C/C++)作者 (阿愷)時間10年前 (2015/10/02 02:40), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/1
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

10/02 03:28, , 1F
call by value跟call by address問題.你這樣寫是傳值進去
10/02 03:28, 1F

10/02 03:30, , 2F
如果這樣寫函式會在配置一記憶體給變數s所以變動內容不是
10/02 03:30, 2F

10/02 03:31, , 3F
main函式所用的stack記憶體區塊,必須透過傳址進去改
10/02 03:31, 3F

10/02 03:33, , 4F
函式原型要改void push(struct Stack *s,char a)然後於裡面
10/02 03:33, 4F

10/02 03:33, , 5F
s.top改為s->top, s.items[s.top]改為s->items[s->top]
10/02 03:33, 5F

10/02 03:34, , 6F
我知道這個原理 不過不知道struct要怎麼改...
10/02 03:34, 6F

10/02 03:34, , 7F
main更改部分就自己練習看看囉:)
10/02 03:34, 7F

10/02 03:35, , 8F
用手機回太快了抱歉 我之後試試看 謝謝
10/02 03:35, 8F

10/02 03:40, , 9F
你要的是類似這樣吧?http://codepad.org/RUOZaWs8
10/02 03:40, 9F

10/02 08:32, , 10F
指標
10/02 08:32, 10F

10/02 12:02, , 11F
可以過! 感謝 我會再多練習試試
10/02 12:02, 11F
文章代碼(AID): #1M3NuhRq (C_and_CPP)
文章代碼(AID): #1M3NuhRq (C_and_CPP)