1. 程式人生 > 實用技巧 >*p++,*(p++),(*p)++,printf過程呼叫

*p++,*(p++),(*p)++,printf過程呼叫

  1. #include<stdio.h>
  2. intmain()
  3. {
  4. printf();
  5. }

答案為D

  • 執行完(*ptr++)+=123;後arr[]={129,7,8,9,10}

  • 執行printf("%d.%d\n",*ptr,*(++ptr));時,根據c語言中的函式引數壓棧順序--從右向左,首先計算表示式*(++ptr)並將其壓入棧中,接著計算*ptr也將其壓入棧中,再將“%d.%d\n”壓入棧中,然後執行call指令。由此可見,最先壓入的兩個引數的表示式值是一樣的,都是8。

另轉載關於*p++,*(p++),(*p)++的精彩分析

http://zhidao.baidu.com/question/226451389.html

(*p)++,是先取指標P的值,然後對其值進行++運算,
*(p++),是先對指標P進行++運算,然後再取取值,
*p++,同*(p++),因為按優先順序來看,*和++是同級,他們都是從右到左的順序進行運算,所以先++,再*。

如果
char q[5] = "am";
char *p = q;
那麼,
(*p)++後,p就變成了"bm";因為是進行對其首元素進行加1運算
*(p++)後,p就變成了"m",因為是先指向下一個元素,再進行取值運算,
*p++同上面,
如果只是徵對這3個語句賦值給其他變數的話,3個的結果都是a,在這裡。

char o = (*p)++;
char m = *(p++);
char n = *p++;
都是a。

分享給你的朋友吧:


轉載於:https://blog.51cto.com/chenzhijun165/592300