首先 *(ptr++) 等价于 *ptr++ , 加括号干嘛。
其次*(ptr++)+=123; 无非就是将 a[0]+=123 , 然后 ptr++ 指向a[1]
最后printf("%d %d\n", *ptr, *(ptr++) ); 这里犯了严重的错误。
这里的答案是编译器依赖的, *ptr, *(ptr++)到底先执行谁?
一般编译器是先执行后者, 这样当然是 9,8
但也有部分编译器先执行前者, 这样当然是 8 ,8
也就是编译器先执行谁的问题。 ansi c 未定义,
这种写法当然是不允许在程序中出现!
输出是:8 8,不是9 8
可以理解的
ptr++必须在当前表达式运行完毕后,ptr才执行ptr++。
刚开始ptr指向7
*(ptr++)+=123; 运行完毕,ptr指向8
printf("%d %d\n", *ptr, *(ptr++) );
输出:8 8
ptr在该表达式运行完毕后指向9
我已经运行了,编译环境是vc6.0
*(ptr++)+=123; //这句话好像不管用吧 -- 当然有用,a[0]现在就是130
// 执行到这个时候,ptr指向 a[1]
printf("%d %d\n", *ptr, *(ptr++));是这样执行的: c中函数参数是从右往左计算的,先算 *(ptr++),那么值为8,且指针向右移动一位,然后再算*ptr,就是9了。
这个我是看了其汇编代码才敢确定的,以后尽量不要这么写吧,就算对,也不容易阅读,搞这种技巧是没意思的。实现同一种功能,代码能让别人容易看懂的才叫牛逼。
你的问题不在++上,在printf()上面。
printf执行参数时是从后面开始的O(∩_∩)O~