int main()
在vs2008下輸出3 2 3。
部分彙編**如下:
int i = 1;
00418aae mov dword ptr [i],1 //i=1
printf("%d/n%d/n%d/n", i, i++, ++i);
00418ab5 mov eax,dword ptr [i]
00418ab8 add
eax,1
00418abb mov dword ptr [i],eax //i = i+1=2
00418abe mov ecx,dword ptr [i]
00418ac1 mov dword ptr [ebp-0d0h],ecx //臨時變數等於2
00418ac7 mov edx,dword ptr [i]
00418aca add edx,1
00418acd mov dword ptr [i],edx //i = i+1=3
00418ad0 mov esi,esp
00418ad2 mov eax,dword ptr [i]
00418ad5 push eax //i入棧,第三個引數不是++i麼,為什麼?
00418ad6 mov ecx,dword ptr [ebp-0d0h]
00418adc push ecx //臨時變數入棧
00418add mov edx,dword ptr [i]
00418ae0 push edx //i入棧
00418ae1 push offset string "%d/n%d/n%d/n" (41ba24h)
00418ae6 call dword ptr [__imp__printf (4204c4h)]
00418aec add esp,10h
00418aef cmp esi,esp
00418af1 call @ilt+885(__rtc_checkesp) (41137ah)
先從右往左求值,後又從右往左引數入棧。
再如:int main()
在vs2008下輸出5 12 5。
部分彙編**如下:
00418aae mov dword ptr [i],1
printf("%d/n%d/n%d/n", i, (++i)+(++i)+(i++), ++i);
00418ab5 mov eax,dword ptr [i]
00418ab8 add eax,1
00418abb mov dword ptr [i],eax
00418abe mov ecx,dword ptr [i]
00418ac1 add ecx,1
00418ac4 mov dword ptr [i],ecx
00418ac7 mov edx,dword ptr [i]
00418aca add edx,1
00418acd mov dword ptr [i],edx
00418ad0 mov eax,dword ptr [i]
00418ad3 add eax,dword ptr [i]
00418ad6 add eax,dword ptr [i] //為什麼呢?
00418ad9 mov dword ptr [ebp-0d0h],eax
00418adf mov ecx,dword ptr [i]
00418ae2 add ecx,1
00418ae5 mov dword ptr [i],ecx
00418ae8 mov esi,esp
00418aea mov edx,dword ptr [i]
00418aed push edx
00418aee mov eax,dword ptr [ebp-0d0h]
00418af4 push eax
00418af5 mov ecx,dword ptr [i]
00418af8 push ecx
00418af9 push offset string "%d/n%d/n%d/n" (41ba24h)
00418afe call dword ptr [__imp__printf (4204c4h)]
00418b04 add esp,10h
00418b07 cmp esi,esp
00418b09 call @ilt+885(__rtc_checkesp) (41137ah)
合法入棧順序
題目描述 我們知道,乙個入棧序列是的合法出棧序列有,等,而是不合法的.現在冰語有乙個長度為n的序列a 保證序列內數字唯一,且1 a i n 他想知道這個序列是不是入棧順序的合法出棧序列,你能告訴他麼?輸入 第一行為t,表示樣例個數 每個樣例第一行為n,第二行為n個數 1 t 1e4,3 n 100 ...
語言中函式引數的入棧順序
對技術執著的人,比如說我,往往對一些問題,不僅想做到 知其然 還想做到 知其所以然 語言可謂博大精深,即使我已經有多年的開發經驗,可還是有許多問題不知其所以然。某天某地某人問我,語言中函式引數的入棧順序如何?從右至左,我隨口回答。為什麼是從右至左呢?我終究沒有給出合理的解釋。於是,只好做了個作業,於...
語言中函式引數的入棧順序
對技術執著的人,比如說我,往往對一些問題,不僅想做到 知其然 還想做到 知其所以然 語言可謂博大精深,即使我已經有多年的開發經驗,可還是有許多問題不知其所以然。某天某地某人問我,語言中函式引數的入棧順序如何?從右至左,我隨口回答。為什麼是從右至左呢?我終究沒有給出合理的解釋。於是,只好做了個作業,於...