C语言一道简单的问题.请高手指点一下.

程序是这样的:inta=2,*p=&a,*q=&a;printf("%d%d\n",*p++,*(q++));p=&a;q=&a;printf("%d%d\n",*p,(... 程序是这样的:

int a=2 ,*p=&a,*q=&a;

printf("%d %d\n",*p++,*(q++));

p=&a;q=&a;

printf("%d %d\n" ,*p,(*q)++);

结果是: 2 2

3 2

我想请问一下,如何时得出上面的答案呢? 运算顺序的先后过程是怎么样?
我要找 是否忘记了一切 , 你回答的很好,可是还有一半!

末学很高兴,还有两位大哥的热心回答, 三楼的 31903891 回答的很详细,我有点明白了.谢谢.
展开
 我来答
31903891
2007-04-07 · TA获得超过267个赞
知道答主
回答量:104
采纳率:0%
帮助的人:0
展开全部
你这题相当复杂,我经过多次调试才得出答案,++p,或者p++之前还是之后用稍微学过的都知道,这里我就不说了。

这里讲重点,++和*是运算优先级相同的运算符,因此同时出现在一个语句中而且没有()的情况下就看语句的结合规律,它们的结合规律是自右向左。

因此第一个printf语句中*p++,先结合++,也就是说在调用p之后p的地址++,因此对a的值没有影响,第一句运行完,a的值仍是2。

再看第二句,这里更绝,语句是从右向左读的,注意(*q)++这里有括号,因此在输出了a的值后a++了,因此前面的*p的值是3了,这里最应该注意的是语句是从右向左读的,你将(*q)++改成(*q)--就能验证这一事实。

说了这么多,希望你在C语言的学习中多看多想,还有更重要的是多动手测试你的程序,自己找到答案才是最有收获的,希望能在今后的学习中和大家共同进步。
百度网友a22186a51
2007-04-07 · 超过10用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:0
展开全部
由于指针的间访操作和++操作是在同一个优先级,
结合性从右至左,所以
*p++
先做p++,再做*操作,即*(p++)

输出<<优先级比*和++低,先做*和++运算,最后输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
是否忘记了一切
2007-04-09 · TA获得超过248个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:208万
展开全部
关键在你定义的变量
int a=2 ,*p=&a,*q=&a;
a=2, 内存里放一个 int 类型的数据 值为 2;
让 p 指向 a 的内存 也就是等于 p 的值 也为 2;
q 同理 ;
输出的时候 , 分清楚 ++p 与 p++ 的先后顺序
++p 输出 3 在运算之前 自身先 加 1
p++ 输出 2 在运算之后(也就是输出之后) 加 1 ,所以只能在屏幕上看见 2
很好的问题,很有专研精神,努力~!

-------------------------------------------------------
找我~?
有什么尽管问~
我会的都告诉你~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bearoo8
2007-04-07 · TA获得超过263个赞
知道小有建树答主
回答量:356
采纳率:0%
帮助的人:235万
展开全部
x++是先用x的值再把x加一
这样你该懂了把
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式