*p++,*(p++),(*p)++,printf過程呼叫
阿新 • • 發佈:2020-10-20
- #include<stdio.h>
- intmain()
- {
- 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 m = *(p++);
char n = *p++;
都是a。
分享給你的朋友吧:
轉載於:https://blog.51cto.com/chenzhijun165/592300