作者ledia (下班後才下棋)
看板C_and_CPP
標題Re: [問題] 問一個基本的指標觀念問題
時間Thu Nov 26 11:55:04 2009
※ 引述《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