c语言问题,不理解,求高手指点,例子如下:

#include<stdio.h>main(){intj;inta[]={1,3,5,7,9,11,13,15},*p=a+5;for(j=3;j;j--){switch... #include<stdio.h>
main()
{
int j;
int a[]={1,3,5,7,9,11,13,15},*p=a+5;
for(j=3;j;j--)
{
switch(j)
{
case 1:
case 2: printf("%d",*p++);break;
case 3: printf("%d",*(--p));
}
}
}
不知道怎么算结果?
展开
 我来答
不信佛的佛手瓜
2014-01-17 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:84
采纳率:0%
帮助的人:83.4万
展开全部
输出结果是 9 9 11
初始化后p指向a[5],就是11.
第一次循环。进入case3,输出*(--p)p先减一,输出9。
第二次循环。进入case2,输出*p++,*p++这里等价于先输出*p,后进行p++。返回仍然是9,返回后p指向11.
第三次循环。进入case1,然后走*p++,同第二次循环。
百度网友0b24e51a2
2014-01-17 · 超过13用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:27.4万
展开全部
这个不难理解啊。
for(j = 3; j ; j--) //开始的时候j=3 每运行一次 j-- 直到j=0为假。所以运行三次。
对应分别执行:case 3: case2:case1:的语句,然后i=0;退出for循环。

第一次:case 3 打印*(--p); 开始p指向数组a的第五个位置即9 现在减一个位置不就是7了吗
第二次*p++就是9了。
第三次 case1:由于没有 break语句,会再次执行 case2: 再*p++ 输出11.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
菠蘿派影帝
2014-01-17
知道答主
回答量:9
采纳率:0%
帮助的人:5.7万
展开全部
结果:
9911
第一次:case3: 输出完再减所以是“9”,减完是7.
第二次:case2: 7加完再输出是“9”,加完是9
第三次:case1自动跳case2:9加完后输出是“11”,加完是11.
result:9911
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
燕戈雅Sh
2014-01-17
知道答主
回答量:12
采纳率:0%
帮助的人:2.9万
展开全部
第一次:case 3 打印*(--p); 开始p指向数组a的下标为5的元素为11 p--为9第二次*p++ 是先输出*p的值之後在做p++动作,所以本次输出仍然为9,但是输出后p++。第三次 case1:由于没有 break语句,会再次执行 case2: 再*p++ 输出11,之后p++.
所以结果是9911
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
billing_yaozy
2014-01-17
知道答主
回答量:11
采纳率:0%
帮助的人:4.1万
展开全部
第一次循环:9
第二次循环:10
第三次循环:什么也不输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式