11. 下面程序的输出结果是_____________。 #include <iostream.h> using namespace std; int x[ ]={5,4,3

11. 下面程序的输出结果是_____________。
#include <iostream.h>
using namespace std;
int x[ ]={5,4,3,2,1};
int main()
{ int i, *p, m=0;
for(p=x,i=1;p+i<=x+4;i++)
{cout << *(p+i);
for(i=0;i<4;i++)
{m+=p[i];
cout << "\t"<< m;
}
}
return 0;
}
这程序是没有错就看不懂

第1个回答  2013-08-16
p=x,i=1,p+i<=x+4成立:
输出*(p+i)即输出*(p+1)或x[1],输出:4
i=0,i<4成立: m=0+p[i]=0+p[0]=0+x[0]=5,输出:制表符和5
i++,i=1,i<4成立: m=5+p[i]=5+p[1]=5+x[1]=9,输出:制表符和9
i++,i=2,i<4成立: m=9+p[i]=9+p[2]=9+x[2]=12,输出:制表符和12
i++,i=3,i<4成立: m=12+p[i]=12+p[3]=12+x[3]=14,输出:制表符和14
i++,i=4,i<4不成立,循环结束
i++,i=5,p+i<x+4不成立,循环结束
最终得到的输出为:
4 5 9 12 14本回答被提问者和网友采纳
第2个回答  2013-08-16
4 5 9 12 14
3 19 23 26 28
2 33 37 40 42
1 47 51 54 56
在大循环中,首先p=x,是让指针p指向x数组的第一位的地址,即x[0]的地址。所以p+i就是x[0]偏移i个位置的地址了。由于i的初始值为1,所以根据大循环的判断条件p+i<=x+4可以知道循环进行4次。
每次大循环首先输出*(p+i),即是输出p+i地址所保存的数。上面说了,由于p的地址为x[0]的地址,则p+i的地址就是x[0]偏移i个位置的地址。因此当i=1时,*(p+i)就相当与x[1],即4;i=2时,*(p+i)就相当于x[2],即3。如此类推。
现在看小循环。小循环中利用一个全局变量m进行了累加。由于p的地址在循环过程中是不变的,所以小循环所累加的总是p[0],p[1],p[2],p[3]。即每进行了一次大循环,m的值就会增加14。由于m并未清零,所以是累加的。如此一来便得到了结果。
第3个回答  2013-08-11
就是问题4213123124
相似回答
大家正在搜