在C中printf计算参数是从右向左压栈的,
问题:以下代码输出时多少?
#include <stdio.h>
int main()
{
int b=3;
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
return 0;
}
分析:
*(ptr++)+=123;执行后,数组元素为[129,7,8,9,10],且ptr指向7
printf("%d,%d",*ptr,*(++ptr)); 从右向左运算,第一个执行的是(++ptr),将ptr两次压入栈区,两次ptr值都是指向8,,所以执行结果为8,8。
问:如果改为printf("%d,%d",*ptr,*(ptr++));答案又是多少呢?(8,7)读者可按以上思路可自行分析