#include void main(){ int b=3;int a; int arr[]={6,7,8,9,10};

问题描述:

#include void main(){ int b=3;int a; int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123;
#include
using namespace std;
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.
优先级关系应该是 ()大于*(指针)大于 ++ 大于+=
那*(ptr++)+=123;的执行顺序应该是 (ptr++)后再执行*,再执行+=.
可是结果是错的.
正确顺序是.先*ptr+=123,后再*ptr++.为什么啊
1个回答 分类:综合 2014-10-02

问题解答:

我来补答
求什么?
再问: #include using namespace std; 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. 优先级关系应该是 ()大于*(指针)大于 ++ 大于+= 那*(ptr++)+=123;的执行顺序应该是 (ptr++)后再执行*,再执行+=。 可是结果是错的。 正确顺序是。先*ptr+=123,后再*ptr++。为什么啊
再答: 首先,那个using namespace std;这句就没必要。 然后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了。 不知道这么说你明白了没
再问: THKS.明白了。哈哈
 
 
展开全文阅读
剩余:2000