答案為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。
分享給你的朋友吧: