注册 登录
编程论坛 新人交流区

[求助]有关指针

tianxia_buaa 发布于 2007-10-19 23:29, 299 次点击

查找数组中的元素,我想用指针来创建一个数组,并在其中查找指定元素,为什么每次编译能通过,执行时在输入第一个元素后就推出程序了?我想应该是指针用错了,我只用数组可以通过,可我不知道什么地方出错了。求教高手指点啊!!


#include<iostream.h>
void Input(int *p, int num);
void Check(int *p, int num);
void main()
{
int (*Array)[]=0 , num;
cout<<"输入要创建的数组元素的个数!"<<endl;
cin>>num;
Input(*Array,num);
Check(*Array,num);
}

void Input(int *p ,int num)
{
for(int i = 0; i<num ; i++)
{
cout<<"请输入第 "<<i+1<<" 个元素!";
cin>>(*(p+i));
}
}
void Check(int *p , int num)
{
int x;
cout<<"请输入要查找的元素!"<<endl;
cin>>x;
for(int i =0; i<num ;i++)
{
if(*(p+i)==x)
break;
}
if(i<num)
cout<<"你要查找的元素" <<x<<" 是数组中的第 "<<i+1<<" 个元素!"<<endl;
else
cout<<"没有你要找的元素!";

}

6 回复
#2
zxc19982007-10-19 23:59

指针没有申请空间

#3
tianxia_buaa2007-10-20 09:50
我用 p=new int; 在Input中的 cin 语句之前申请新的空间,结果程序只是向前进行到check中输入要查找的元素值就退出了,是不是因为在Input中申请的空间在退出Input之后就释放了??那我该怎么修改啊,只能在主函数中完成输入数组的功能么??请教大家!谢谢!!!
#4
solardo2007-10-20 16:36

下面三个声明:
1:CAT Familyone[500]; /*一个包含500个CAT对象的数组;*/
2: CAT * FamilyTwo[500];/*一个包含500个CAT对象的指针的数组*/
3: CAT * FamilyThree =new CAT[500]; /* 一个指针,指向一个包含500个CAT对象的数组

//dev c++
//by solardo
//2007-10-21
//ver.1.0
/* Using Pointer of Array */
#include<iostream>
using namespace std;
void Input(int *p, int num);
void Type(int *p, int num);
void Check(int *p, int num);
bool Repeat();
int main()
{
int num=0;
cout<<"输入要创建的数组元素的个数!\t"<<endl;
cin>>num;
int *Array= new int[num];
Input(Array,num);
Type(Array,num);
do
{
Check(Array,num);
}
while(Repeat());

system("pause");
return 0;
}

void Input(int *p ,int num)
{
for(int i = 0; i<num ; i++)
{
cout<<"请输入第 "<<i+1<<" 个元素!\t";
cin>>(*(p+i));
}
cout<<endl;
}

void Type(int *p, int num)
{
cout<<"你的输入是:\t"<<endl;
for (int i=0; i<num;i++)
{
cout<<"第"<< i+1<< "个元素: "<<*(p+i)<<endl;
}
cout<<endl;
}
void Check(int *p , int num)
{
int x=0;
int j=0;
cout<<"请输入要查找的元素!\t"<<endl;
cin>>x;
for(int i =0; i<num ;i++)
{
if(x==*(p+i))
{ j=i;
break;}
else
{j=-1;}
//
}
if(j!=-1)
{
cout<<"你要查找的元素" <<x<<" 是数组中的第 "<<j+1<<" 个元素!"<<endl;
cout<<endl;
}
else
cout<<"没有你要找的元素!"<<endl;

}
bool Repeat()
{
int CH=0;
cout<<"要再检查吗? 是:1. 不:0 .\t"<<endl;
cin>> CH;
if ((CH!=0) && (CH!=1))
{
cout<<"Worng option!\a\a\a";
return 0;
}
else
return CH;
}

只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2007-10-21 21:20:14编辑过]

#5
tianxia_buaa2007-10-25 00:12
我明白自己错哪了.
int (*Array)[]=0 , num;
cout<<"输入要创建的数组元素的个数!"<<endl;
cin>>num;
Input(*Array,num);
Check(*Array,num);
应该改为
int num;
cout<<"输入要创建的数组元素的个数!"<<endl;
cin>>num;
int *Array = new int[num];
Input(Array,num);
Check(Array,num);
之前没有给头节点的指针Array申请空间,函数参数的传递也不对.

谢谢楼上的各位!!!
#6
nicole19982007-10-25 04:29

指针学的不好,也来看看

#7
deamonhdb2007-10-25 09:34
没学过C++,来看看,也学学
1