这肯定是必然的了,
开始int *ptr=array;此时*ptr等于array[0]即为6
之后你执行了*(ptr++)+=123;
这句话相当于 *ptr += 123;
ptr = ptr +1;
此时array[0]的值增加为129;
*ptr 此时等于 array[1] 即为7
之后你执行printf("%d,%d",*ptr,*(++ptr));
printf语句从右向左读取,所以编译器先计算*(++ptr)的值;
而这句话相当于 *(ptr+1);
ptr = ptr + 1;
之后编译器在计算*(ptr)的值,两次的值当然一样。
首先,你要弄清楚 ptr++表示先使用ptr的值,再让ptr的值自增1
而++ptr的值是先使用ptr+1的值,再使ptr的值自增1
还有printf语句是从右向左读取执行的 但是显示的顺序并不改变
比如printf("%d,%d",15,20);还是会显示 15,20,仅仅是编译器读取这句话的顺序为自右向左
# include
void main()
{
int array[6]={6,7,8,9,10};
int *ptr=array;
*(ptr++)+=123;//使array[1]=7+123=130
printf("%d,%d",*ptr,*(++ptr));//先输出*(++ptr)=8,再输出*ptr=8
}
所以输出8,8
1楼说得有点问题
*(ptr++)+=123;//先array[0]=6+123=129 后移动指针