作者cole945 (躂躂..)
看板C_and_CPP
標題Re: [問題] 面試遇到的一個問題
時間Mon Feb 4 10:10:46 2008
建議你直接看spec..
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
這類的問題在spec都闡述的很清楚, 前面的人也都已經提過keyword了..
建議你可以用 sequence point 和 evaluation 當 keyword就會查到你想要的資料了
※ 引述《oohay (五黑)》之銘言:
: ※ 引述《kesa (blush)》之銘言:
: : f(i++, i);-> undefined /* 沒什麼人會這樣搞自己 */
: 這個未定義是因為是因為函數的參數順序未定義.
: : a[i++] = i;-> undefeind /*常有人這樣寫*/
(這是 spec 上舉的例子)
: ......這是未定義嗎? 我記得是 a[i] = i++;
你會這樣想, 表示你還沒搞懂為什麼 undefine,
重點在於 ++ 被執行的時間點未定,
a[i++] = i;
可以是
t = i;
i = i + 1;
a[t] = i;
也可以是
t = i;
a[t] = i;
i = i + 1;
兩種不同執行順序會讓 a[t] 被 assign 的值差了 1
第一個例子也會有想同的問題..
: : 都錯在 "Furthermore, the prior value shall be accessed only to dterminie
: : the value to be stored (i)"
: : 同理 p = z++ + z;-> undefined. /* @@ 考題 */
: 很抱歉,這裏++只打算更新z一次,但是z不會被更新第二次,
: 所以請問,上述句子提到"請不要把一個量詞更新超過一次",z+++z符合此條件啊!!!
: 所以頂多就是++的效果會發生在非sequence point之處,好比變化只發生在時脈切換處.
: 但是,未定義行為發生在哪裏呢?
同理,
z = 0;
p = z++ + z;
p 可能是 0 + 0
也可能是 0 + 1
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.139.134.12
※ 編輯: cole945 來自: 220.139.134.12 (02/04 10:11)
※ 編輯: cole945 來自: 220.139.134.12 (02/04 10:11)
※ 編輯: cole945 來自: 220.139.134.12 (02/04 10:11)
→ oohay:那這樣十誡所講a[i]=i++是真是假? 02/04 10:41
推 oohay:我了解了,最後感想是「謝丞相賜箭」 02/04 11:12
推 StubbornLin:我之前研究那考題時就有發現 我也有提過++什麼時候跑 02/04 11:17
→ StubbornLin:不知道這件事 不過我沒有那樣的把握說我一定是對的 02/04 11:18
→ StubbornLin:人的記憶力有限 把腦力花在更重要的地方上不是更好? 02/04 11:19