看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 指標+1不是等於指向下一個位置嗎? 怎麼整個反過來印了...? 餵入的資料(Input): 預期的正確結果(Expected Output): 1 2 3 錯誤結果(Wrong Output): 3 2 1 程式碼(Code):(請善用置底文網頁, 記得排版) int array[4]={1,2,3,4}; int *p=&array; printf("%d %d %d",*p,*p++,*p++); 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.129.19.21
ericinttu:十三誡之8 12/12 19:12
iamstudent:函數的引數沒有保證執行順序,可能先從右邊先呼叫 12/12 19:12
iamstudent:f(g(), h()); //g()和h()的執行順序也不保證 12/12 19:13
iamstudent:最佳化可以決定選擇任何一種作法 12/12 19:14
iamstudent:不過f一定要等g和h都算出才會執行,這一點有保證 12/12 19:15
感謝^^恍然大悟 ※ 編輯: asadman1523 來自: 140.129.19.21 (12/12 19:19)
mythnc:int *p = array; 12/12 23:18
diabloevagto:#1Em1oVzU 寫得很仔細,簡單來說這就是未定義行為 12/12 23:27
GTS250:一維數組加一 是跳過整個數組(在這是跳4(格)*4(字節) ) 12/13 00:23
JyunYan:你把*p++改成*p+i的形式就可以了 12/13 01:13
elfkiller:沒開最佳化的話c++預設是由右到左PUSH 12/13 08:11
hilorrk:+mythnc 在這情況下&array和array都decay到一樣的型態 12/13 08:57
hilorrk:+elfkiller 有沒有開最佳化都一樣 C++標準未定義行為 12/13 08:58
diabloevagto:未定義就是未定義,怎麼能夠說是右到左... 12/13 09:46
angleevil:十三誡之8,c/c++為了速度,沒有強制規定由右到左運算 12/13 10:26
angleevil:乖一點,不要再誤用它,不然有一天這bug會讓你爆肝 12/13 10:27
diabloevagto:#1Em1oVzU 看這篇吧,LPH66大大都無奈了 12/13 10:33
elfkiller:語意不清sorry, 我想說的是函數__stdcall是由右到左 12/13 20:33
VictorTom:VC好像預設是cdecl, 小弟以為是看compiler設定或使用到 12/13 22:18
VictorTom:API/LIB設定好的calling convention. 另外, CC裡push進 12/13 22:18
VictorTom:stack的順序, 有規定剛好是參數evaluation的順序嗎?? 12/13 22:19
purincess:樓上VC預設是cdecl沒錯~~而且我記得好像是沒有規定push 12/14 02:54
purincess:順序是evaluate的順序. 12/14 02:54
purincess:事實上calling convention並不是C語言的一部分吧@ 12/14 02:55
elfkiller:沒有明文規定 不過為了handle不定參數函數一般會遵循 12/14 20:49