c 引數傳遞順序與自加運算的問題,int a 0 printfd d da,aa 的結果為434,請問為什麼

2021-08-08 07:18:37 字數 760 閱讀 1850

1樓:匿名使用者

語句內部的自加、自減運算在不同的編譯平臺上的實現是各不相同的,這是因為ansi和iso都沒有給出具體要求,但當一個語句執行完成後,作為「附加效應」也必須完成,這是所謂的「時間點」,可參閱《c缺陷與陷阱》。

2樓:匿名使用者

剛根據你的問題做了一個測試,感覺很神奇

#include

void func(int a,int b,int c,int d,int e)

void main()

輸出結果是

4 3 4 4 1

從這個結果看,引數確實是從右往左進行的(不然最後的1怎麼解釋...)由結果看,運算子++應該是最早執行的

當遇到a++,把此時a的值傳遞到引數中就自增當++a,它會自增但是沒有傳參

最後所有運算完成後再依次從右往左傳參壓棧

以上結果屬於推測,你可以做做測試哦

3樓:觀音大_溼

是誰說的結果為434、433 ,你運算過嗎?我便宜執行明明為101. 從結果看原因應該是先計算的a++的值為0,計算完後a的值就變成1了,所以結果為101.

4樓:雨中抬頭

如果a=0的話,答案應該是100,因為根據vc編譯器的特點是後進先出的入棧特點,於是,進的時候,是001,出棧就變成100了~樓主的**應該是抄錯了,結果是433的話,a不可能是0,肯定是3~

就說這麼多了,其實這些都是很簡單的東西,只要自己編譯一下就能推出原因了~

C如何使用結構來傳遞多個引數

public struct mystructclass program class myclass 簡單明瞭,不用說明了吧 我好像跑題了,呵呵。很容易啊,請看看params 這個關鍵字,你就立刻明白了。比如定義一個方法 public static void useparams string form...

c選擇題陣列名作為函式的引數傳遞的是請舉

答案是b int a 5 a就是數 組名,也是a 5 的第一個 元素即a 0 的地址。include int add int b int main void sum add a add a 這裡傳遞的 內就是陣列a的首容地址,也就是陣列名。b 陣列首元素的地址 這個沒有好舉例的吧 c 就這樣規定的 ...

定義js函式有引數呼叫的時候只傳遞

這個是不行的,你呼叫方法的時候會報錯。除非你在建立一個同名函式,設定兩個引數的,使他們過載。當你輸入兩個引數時就自動條用兩個引數的函式了。想讓同一個js函式被多次呼叫,每次傳入的引數不同,但是隻有第一個函式生效了 5 想多次呼叫就把函式寫成建構函式,每次呼叫時初始化一個它的例項。你貼出來的 是一個立...