永发信息网

请高手检查一下这个C语言程序哪里不对

答案:3  悬赏:50  手机版
解决时间 2021-11-17 03:10
  • 提问者网友:寂寞撕碎了回忆
  • 2021-11-16 23:27
请高手检查一下这个C语言程序哪里不对
最佳答案
  • 五星知识达人网友:英雄的欲望
  • 2021-11-17 01:03
语法没有错误,能够编译通过并能运行。
输出结果:
ar=9ar=9ar=11追问能帮忙解释一下为什么是这个结果吗???ar=9ar=9ar=11追答for循环运行3次,j值分别是3,2,1;p指针初始时指向a数组中的11
当j==3时,打印出11之前的数9(因为是--p,p指向9)
当j==2时,打印出9之后p指针指向11
当j==1时,打印出11后指针指向13。
所以打印结果是:ar=9ar=9ar=11追问break起什么作用??谢谢追答break作用是中止switch语句。
在此例中,如果没有break,那么执行PR(*p++)后还会执行PR(*(--p));但是加了break后,执行PR(*p++)后跳出switch语句。
全部回答
  • 1楼网友:摆渡翁
  • 2021-11-17 02:05

case2的冒号错了

追问结果为什么是ar=9ar=9ar=11???追答指针是取地址的,*p=a+5;也就是a[5]的值,a[5]=11,case 3 的时候--p就是a[4]=9,case 2的时候*p++是取值后自增,也是9,最后a[5]就是11了
  • 2楼网友:怙棘
  • 2021-11-17 01:17
#include
#define PR(ar) printf("ar=%d ",ar)
void main()
{
int j, a[] = { 1, 3, 5, 7, 9, 11, 13, 15 }, *p = a + 5;
for (j = 3; j; j--)
switch (j)
{
case 1:
case 2:PR(*p++); break;
case 3: PR(*(--p));
}
}

ar=9
ar=9
ar=11追问能帮忙解释一下为什么是这个结果吗???ar=9ar=9ar=11
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯