我正在编写一个程序,该程序必须使用动态分配来编辑数组的元素。我有了第一个子程序,但是每当我尝试运行第二个子程序时,我都会看到一条错误消息
错误:无法将参数'2'的'int *'转换为'int **'到'void crossout(int,int **,int)' crossout(5,thearr,2);
int* arr(int size);
void crossout(int size, int* arr[], int factor);
int main()
{
int* thearr= arr(5);
thearr=crossout(5,thearr,2);
for(int ix=0; ix<5; ++ix){
cout<<thearr[ix]<<" ";
}
return 0;
}
int* arr(int size){
int *thearray= new int[size];
for(int ix=0;ix<size;++ix){
if(ix>1)
thearray[ix]=0;
else
thearray[ix]=-1;
}
return thearray;
}
void crossout(int size, int* arr[], int factor){
*arr[factor]=1;
for(int ix=factor*factor;ix<size; ix * factor){
*arr[ix]=-1;
}
}
在这种情况下使用指针以避免此错误的正确方法是什么?
答案 0 :(得分:1)
我猜测,您实际上想要这个:
// sets arr[factor]=1 and arr[pow(factor,i)]=-1 for i=2,3,...
void crossout(int size, int*arr, int factor){
arr[factor]=1;
for(int ix=factor*factor; ix<size; ix*=factor) { // really *= ?
arr[ix]=-1;
}
}
并称呼它
crossout(5,thearr,2);
在int main()
中。请注意,int a[]
等效于int*a
,int*a[]
等效于int**a
。