魔改ak47突击步枪:C++,请改正!!!!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 23:45:47
#include<iostream>
using namespace std;
void main(){
int *p;
int a[4];
p=a;
for(int i=0;i<4;i++)
cin>>a[i];
while(*p){
cout<<*p<<'\n';
p++;
}
}
请分析输出错误的原因!!!

while(*p){
cout<<*p<<'\n';
p++;
}
p是指针,如果p指向的数组a[]所有元素不为0,p指向a[3]时,循环仍不会跳出,p++就会N指向数组外的一个未知值,这里就出错了啊,循环会一直继续到p所指向的未知地址的值为0,在这之前就会打印出一些乱七八糟怪异的东西
汗,其实C++我也懂得不多,你看看是不是象我分析的一样,如有错误,纯属正常,不负担任何法律责任,嘿嘿

while(*p)
只有在*p==0时才退出循环
可改为
#include<iostream>
using namespace std;
void main(){
int *p;
int a[4];
p=a;
for(int i=0;i<4;i++)
cin>>a[i];
for(int i=0;i<4;i++) {
cout<<*p<<'\n';
p++;
}
}

while(*p)应该改为
while(p<a+4)

没错儿,是 while( *p ) 用法上的问题,更改一下即可:
#include<iostream>

using namespace std;

int main()
{
int *p;
int a[5];
p = a;
a[4] = 0;
for(int i=0;i<4;i++)
cin>>a[i];
while(*p)
{
cout<<*p<<'\n';
p++;
}

return 0;
}