郑州武警消防总队:请教一道华为笔试题

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 14:17:17
设int arr[]={6,7,8,9,10};

int *ptr=arr;

*(ptr++)+=123;

printf("%d,%d",*ptr,*(++ptr));

答案为什么是:8,8  *(ptr++)+=123; 分解为
*ptr=*ptr+123;//第一个数组元素变为6+123=129
ptr++;//指针指向第二个元素
printf("%d,%d",*ptr,*(++ptr));//优先级从右往左,但是我觉得这里好像是根据编译器的。如果真的是从右往左,那就可以解释了,右边的ptr指向了第三个元素(先自增后赋值),因此后面的是8,前面那个指针因为之前已经指向了第三个元素,所以也是8