printf("%d %d",*p,*(p++));和printf("%d %d",*p,*(p+1));的结果为什么不同?????请高手指点

inta[]={6,7,8,9,10};int*p=a;printf("%d%d",*p,*(++p));结果是7,7inta[]={6,7,8,9,10};int*p=... int a[]={6,7,8,9,10};
int *p=a;
printf("%d %d",*p,*(++p));
结果是7,7
int a[]={6,7,8,9,10};
int *p=a;
printf("%d %d",*p,*(p++));
结果是6,6
int a[]={6,7,8,9,10};
int *p=a;
printf("%d %d",*p,*(p+1));
结果是6,7
不同的结果为什么????
在c++ win32里面编译空文件和简单两种编译结果也是不同的
展开
 我来答
琦绮梦0mp
推荐于2018-04-26 · TA获得超过2195个赞
知道大有可为答主
回答量:1361
采纳率:0%
帮助的人:1802万
展开全部
*(p++); 是输出p的值,然后p指针加1
*(p+1); 是输出p+1的值,p指针不变

一个是p的值,一个是p+1的值,当然输出的结果不同咯

printf("%d %d",*p,*(++p));的结果跟 *(p+1)的结果相同
不过*(++p)输出后,p指针加1了,而*(p+1)输出后,p指针没有变化
dreaminit
2010-08-26
知道答主
回答量:23
采纳率:0%
帮助的人:13.9万
展开全部
函数调用时参数的传递顺序有不同的调用约定,您问题中给定的是按从右往左的顺序。
第一外列子中,首先计算++p,先计算自加,再使用p的值,因此指向第二个元素。
第二个例子,是p++,即首先使用p的值,进行自加,即运行完printf语句后,p指向第二个元素。
第三个例子,没有改变p的值,因此p指向第一个元素,p+1指向第二个元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-08-26
展开全部
printf("%d %d",*p,*(p++));
这一句中*(p++)是先求出*p的值,即打印出来的是p的原值,然后再使p=p+1;根据求值顺序由右至左,实际输出是的p+1的值、p的值。
printf("%d %d",*p,*(p+1));
这一句中没有对p的赋值操作,它输出的是p的值、p+1的值,这2句语句的结果刚好相反
(注,p的值、p+1的值指的是他们对应的变量的值)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yueshang_2
2010-08-26 · 超过13用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
p++是使用完p后对p进行+1,相当于执行了p=p+1,而*(p+1)这里用完之后p值还是没变,另外要注意函数的参数求值顺序,大部分是自右而左的。 就是自增运算咯,++p,对p先执行p=p+1,再取p的值进行计算,--p类似,p++,在前面说过了,和*(p+1)的区别也说了,仔细看了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
100duman
2010-08-26 · TA获得超过966个赞
知道小有建树答主
回答量:1014
采纳率:100%
帮助的人:299万
展开全部
当然不同啦,前者是先使用值,后者是先移动指针啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式