int a[5]={1,2,3,4,5},*p; p=a; printf("%d %d",*p,*(p++)); 为啥输出为1 1

printf在vc6.0中不是自右向左执行的吗
2024-11-23 23:07:00
推荐回答(1个)
回答1:

因为 *(p++) 用的是 后缀加加,按规定,在表达式内不自增,出了表达式后再自增。
所以:
printf("%d %d",*p,*(p++));
就等于:
printf("%d %d",*p,*(p));
输出 1 1
再执行 p=p+1; (地址增 1*sizeof(int) ).
----------
你可以打印地址,看p指向的地址变化
printf("%p\n",p);
printf("%d %d\n",*p,*(p++));
printf("%p\n",p);