原來我不懂printf

int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++)+=123;
printf(“ %d %d ”, *ptr, *(++ptr));


很簡單的一段代碼,無非是指針的問題,再printf 打印出來,但是考點卻不再指針,而在printf,做了一段時間的嵌入式開發,根本用不到printf,但是也沒想到居然做錯了,不禁感慨,大學百讀了。


答案:輸出:8 8


你做對了麼?


過程:對於*(ptr++)+=123;先做加法 6+123,然後++,指針指向 7;對於 printf(“ %d %d ”,

*ptr, *(++ptr));從後往前執行,指針先++,指向 8,然後輸出 8,緊接着再輸出 8

printf("%d,%d",*ptr,*(++ptr)); //考慮從右往左計算,先是*(++ptr),現在ptr指向8,然後*ptr也是8,輸出8,
printf的參數,函數printf從左往右讀取,然後將先讀取放到棧底,最後讀取的放在棧頂,處理時候是從棧頂開始的,所有從右邊開始處理的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章