#include <stdio.h>
void main(){ int b=3;int a; int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d\n",*(ptr),*(++ptr)); } 结果是8,8.
首先int* ptr=arr;这一句使得ptr指针指向arr数组的第一个数,也就是6; *(ptr++)+=123;这个不是先执行括号里面的,因为里面的是ptr++,这是先取值,再自加,这一句相当于*ptr+=123;ptr++;两句。实际就是使得*ptr指针的内容加上123。也就是数组第一个6加上123变成129。做完之后ptr自加。这时候ptr指针指向数组的第二个数7; *****最后一个printf语句,先执行的是后面的*(++ptr)而不是*(ptr),所以ptr先自增,使得指针指向8,然后输出。这样就输出的都是8了。你可以把*(++ptr)和*(ptr)的位置对调一下,那么先执行*(ptr),再执行*(++ptr)。那么输出的就是8,7了。