天天看點

*p++,*(p++),(*p)++,printf過程調用

*p++,*(p++),(*p)++,printf過程調用

答案為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。

分享給你的朋友吧: