看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《deh3215 (黑金屬魂)》之銘言: : ※ 引述《samuelcdf (溫泉龜)》之銘言: : : 如果沒記錯的話, 傳到函式中的參數再傳遞的過程是被放到堆疊中, 也就是說 : : 最後的順序會變成這樣: : : *p++ : : *++p : : ++*p : : 字串"%d %d %d\n"的啟始記憶體位置 : : 所以, : : [p 等於 &x[0]], *p++ : : 先把 *p(值為0)傳出去, 然後 p 變成 &x[1] (顯然compiler把*p++解釋 : : 為 *(p++) ) : : [p 等於 &x[1]], *++p : : p 先變成 &x[2], 然後把*p傳出去(也就是20) : : [p 等於 &x[2]], ++*p : : *p 先變成21, 然後把*p傳出去 (21) : 傳到函式中的參數再傳遞的過程是被放到堆疊中 這句話的意思是說 : printf("%d %d %d\n,++*p,*++p,*p++") : 在堆疊裡是|*p++|最後進去,先處理 : |----| : |*++p| : |----| : |++*p|先進去,最後處理 : |----| : 這樣的情形嗎,所以處理順序是*p++,*++p,++*p ? : 最近在加強指標的觀念 這跟指標觀念比較無關啦 這裡 *p++ *++p ++*p 三者被推到 stack 上的順序是固定的 但是誰先計算其實是 undefined 並不如前面文章所說的那樣 所以到底會印出什麼, 是無法預期所有 compiler 都一樣的 解決方法就是: 不要寫出這種 code .... XD -- 有時候,遺忘,是令人快樂的。什麼時候?當然是有人傷了你的心的時候。  存心傷你的那個人,固然是故意和你過不去,但是被傷了心而耿耿於懷的你  ,卻是和自己過不去了。所以,記性不好的人,通常會是比較快樂的人,也  是比較不容易被擊倒的人。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.50
ledia:如果還有疑問, 可以查查 "sequence point" 相關的說明 11/26 11:56
deh3215:thxs 11/26 13:58