关于C语言的一个指针问题

inta[]={7,8,9,10,11};int*ptr=a;*(ptr++)+=123;//这句话好像不管用吧printf("%d%d\n",*ptr,*(ptr++)... int a[]={7, 8, 9, 10, 11};
int *ptr=a;
*(ptr++)+=123; //这句话好像不管用吧
printf("%d %d\n", *ptr, *(ptr++) );
答案输出是9 8 偶不怎么想得通
如果是分行输:
//printf("%d ", *ptr );
//printf("%d\n", *(ptr++) );
这样输出8 8 这个还可以理解..
展开
 我来答
lazy_smartegg
2010-09-19
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
首先 *(ptr++) 等价于 *ptr++ , 加括号干嘛。
其次*(ptr++)+=123; 无非就是将 a[0]+=123 , 然后 ptr++ 指向a[1]
最后printf("%d %d\n", *ptr, *(ptr++) ); 这里犯了严重的错误。
这里的答案是编译器依赖的, *ptr, *(ptr++)到底先执行谁?
一般编译器是先执行后者, 这样当然是 9,8
但也有部分编译器先执行前者, 这样当然是 8 ,8
也就是编译器先执行谁的问题。 ansi c 未定义,
这种写法当然是不允许在程序中出现!
chenxiao_heng
2010-09-19 · TA获得超过435个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:325万
展开全部
输出是: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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶小怜
2010-09-19 · TA获得超过408个赞
知道小有建树答主
回答量:379
采纳率:0%
帮助的人:259万
展开全部
*(ptr++)+=123; //这句话好像不管用吧 -- 当然有用,a[0]现在就是130

// 执行到这个时候,ptr指向 a[1]

printf("%d %d\n", *ptr, *(ptr++));是这样执行的: c中函数参数是从右往左计算的,先算 *(ptr++),那么值为8,且指针向右移动一位,然后再算*ptr,就是9了。
这个我是看了其汇编代码才敢确定的,以后尽量不要这么写吧,就算对,也不容易阅读,搞这种技巧是没意思的。实现同一种功能,代码能让别人容易看懂的才叫牛逼。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
02230838
2010-09-19 · TA获得超过2067个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:1056万
展开全部
你的问题不在++上,在printf()上面。
printf执行参数时是从后面开始的O(∩_∩)O~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式