教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

c語言中函數(shù)參數(shù)處理順序-從右向左

更新時(shí)間:2016年03月29日16時(shí)57分 來源:傳智播客 瀏覽次數(shù):

  c語言中函數(shù)參數(shù)處理順序-從右向左:

  下面我們來看2個(gè)案例,分析下c語言中函數(shù)參數(shù)處理順序。

  第一個(gè):

  #include "stdio.h"

  void fn(int a,int b,int c)

  {

  printf("%d,%d,%d", a, b, c);

  }

  void main()

  {

  int a = 3;

  fn(a++, a++, a++);

  }

  輸出結(jié)果:

  5,4,3

  原因分析:

  C函數(shù)參數(shù)作為一個(gè)整體執(zhí)行的順序是從右向左,所以會(huì)先處理最右端的參數(shù),然后依次向左處理。所以結(jié)果為最右端的a++先被處理結(jié)果為3,然后++,接著4和5,這樣就有了上面的結(jié)果。

  第二個(gè):

  #include

  int main(void)

  {

  int i = 0;

  printf("%d,%d,%d,%d,%d\n", ++i, ++i, i++, ++i, i++);

  }

  輸出結(jié)果:

  5,5,2,5,0

  原因分析:

  和上面的一樣,執(zhí)行的順序是從右向左,所以會(huì)先處理最右端的參數(shù),然后依次向左處理。不同是出現(xiàn)了++i,對(duì)于i++和++i是先加與后加的區(qū)別,但是在參數(shù)處理上則對(duì)應(yīng)。如果是i++那么表示符合從右向左處理的前提下,當(dāng)即處理該參數(shù)。如果是++i,那么表示只是執(zhí)行++i運(yùn)算并不將結(jié)果作為參數(shù)結(jié)果,將參數(shù)位置壓入堆棧,只有當(dāng)所有參數(shù)從右向左處理完畢之后,從堆棧彈出所有因?yàn)檠雍蟛僮髡Z句而沒有填入最終結(jié)果的參數(shù)位置,將最終執(zhí)行的結(jié)果i,作為相應(yīng)的參數(shù)值,填入進(jìn)去。

  現(xiàn)在大家回憶下,逗號(hào)運(yùn)算符,逗號(hào)運(yùn)算的結(jié)合性是從左至右,完畢之后整個(gè)表達(dá)式的值是最后一個(gè)表達(dá)式的值。

  例子:

  int a[2],x=2,y=5;

  a[0]=(x+3,y++,x++);

  那么最終結(jié)果是:

  a[0]=2 x=3 y=6;

  從上面分析可以看出,函數(shù)參數(shù)和逗號(hào)運(yùn)算符的執(zhí)行順序正好相反!

0 分享到:
和我們?cè)诰€交談!