c++问题,帮我讲讲

来源:百度知道 编辑:UC知道 时间:2024/05/22 12:16:46
#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;
}
------------------