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

#include<stdio.h>voidmain(){intarray[6]={6,7,8,9,10};int*ptr=array;*(ptr++)+=123;prin... # include<stdio.h>

void main()
{
int array[6]={6,7,8,9,10};
int *ptr=array;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
}
为什么程序输出是8,8
展开
 我来答
tonioann
2009-09-07 · TA获得超过737个赞
知道答主
回答量:47
采纳率:0%
帮助的人:31.9万
展开全部
这肯定是必然的了,
开始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,仅仅是编译器读取这句话的顺序为自右向左
情感世界BB
2009-09-07 · TA获得超过2323个赞
知道小有建树答主
回答量:1336
采纳率:100%
帮助的人:546万
展开全部
# include<stdio.h>

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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tomahawkcp
2009-09-07 · TA获得超过667个赞
知道答主
回答量:126
采纳率:0%
帮助的人:114万
展开全部
1楼说得有点问题
*(ptr++)+=123;//先array[0]=6+123=129 后移动指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式