请C++高手指点,为什么编译时候没有错,但是执行的时候显示有一个错误呢?

来源:百度知道 编辑:UC知道 时间:2024/05/29 23:56:28
这个是我写的代码:
#include<iostream>
using namespace std;
int a[10],*pointer=a;
int main()
{
void sr();
void wcg(int *p);
void sc(int *p);
sr();
wcg(pointer);
sc(pointer);
system("PAUSE");
return 0;
}
void sr()
{
int i;
cout<<"Please input 10 names:";
for(i=0;i<10;i++)
cin>>*(pointer+i);
}
void wcg(int *p)
{
int i,j,x,d,max,min,temp;
for(i=0,j=i+1;i<9;)
{
if(*(p+i)<*(p+j)) {min=*(p+i);x=i;j++;}
else {min=*(p+j);x=j;i=j;j++;}
}
if(x!=0) {temp=*(p+x);*(p+x)=*p;*p=*(p+x);}
for(i=0,j=i+1;i<9;)
{
if(*(p+i)>*(p+j)) {max=*(p+i);d=i;j++;}
else {max=*(p+j);d=j;i=j+1;i=j;j++;}
}
if(d!=9) {temp=*(p+d);*(p+d)=*(p+9);*(p+9)=*(p+d);}

1.
for(i=0,j=i+1;i<9;)
{
if(*(p+i)<*(p+j)) {min=*(p+i);x=i;j++;}
else {min=*(p+j);x=j;i=j;j++;}
}
如果p[0]最小,那么都只执行if复合语句,结果i不变,j递增,循环……
for循环修改为:
for(i=0,j=i+1;i<9, j<10;)

2.
for(i=0,j=i+1;i<9;)
{
if(*(p+i)>*(p+j)) {max=*(p+i);d=i;j++;}
else {max=*(p+j);d=j;i=j+1;i=j;j++;}
}
同1,如果p[0]最大……同样修改下for

3.
for(p=a;p<(p+10);p++)
cout<<*p<<" ";
在最后的输出中,你看看你的条件设为什么了。
p < p+10
这条件在内存检测完之前永久成立,检测完几乎是不可能的,现在内存都以G为单位!
修改for循环为:
for(p=a;p<(a+10);p++)

解决问题。

另外,这段代码的功能似乎成了:
输入10个数字,将其中最小及最大的数修改为第一个数。。。
强大!~~~

这个很奇怪啊
怎么在main里定义函数 这不像是c++的语法
int main()
{
void sr();
void wcg(int *p);
void sc(int *p);

声明貌似也应该在外面的吧。
再问问,你的程序要干什么?