原来我不懂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从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有从右边开始处理的。

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