dnf深渊票在哪买:c++问题,帮我讲讲

来源:百度文库 编辑:中科新闻网 时间:2024/05/07 20:07:22
#include<iostream>
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 ;
}
答案 4 5 9 12 14 怎么得的阿。。。

#include<iostream>
int x[]={5,4,3,2,1}
int main( )
{
int i,*p, m=0;
//这里是说p这个指针最多到数组x的最后一个元素
//但是看你的答案,似乎不应该有等号哦。
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 ;
}
前面两位大大的答案似乎都有小小问题吧:
第一个:第一次循环cout<<*(p+i)输出x[0](应该是X[1]吧?)
第二个:四次循环结束因为此时i=4,所以直接跳出大循环。(i为4满足p+i == x+4吧?)
第三个:i改为j的话,该程序不能成立,因为i就不会通过第二层的循环增加到4。

for(p=x,i=1;p+i<=x+4;i++)
------------------------------
p=x:p首先指向数组x得第一个元素
p+i<=x+4: p+i这个指针不能超过数组下届:x+4;
第一次循环i=1;p+i=p+1指向4第二个元素

cout<<*(p+i);
故而输出4。
再往下到第二循环:
-------------------------
for(i=0;i<4;i++)
{
m+=p[i];
cout<<"\t"<<m;
}
-----------------------
i重新设置为0【怀疑你这个地方有问题,应该改成j等】
第一次循环 m=m+p[0]=0+5=5;所以输出5;
第二次循环 m=m+p[1]=5+4=9;;所以输出9;
...................................12
...................................14
-----------------------------------------------
这个循环以后i=4;再返回到外面那个for,但是i已经是4了,p+i<=x+4条件不满足故而程序退出。
----------------------------
建议:
1.for(p=x,i=1;p+i<=x+4;i++)
改成:for(p=x,i=1;i<=4;i++)
2.for(i=0;i<4;i++)
改成for(int j=0;j<4;j++)
-----------------------------------------
ok??

for(p=x,i=1;p+i<=x+4;i++)
p=x表示指针p指向x[]首地址也就是x[0],p+i指向x[i],这句话的意思就是p从x[0]循环到x[4]
第一次循环cout<<*(p+i)输出x[0],然后执行下面语句for(i=0;i<4;i++),四次循环累加p[i]并输出(如第一次是p[0]也就是x[0],第二次是p[0]+p[1],以此类推)四次循环结束因为此时i=4,所以直接跳出大循环。
所以综上,输出结果就是4 5 9 12 14
即包括一次大循环里的cout<<*(p+i)和四次小循环里的cout<<"\t"<<m