C ++数组指针错误无法将“ int *”转换为“ int **”

时间:2019-04-29 22:42:33

标签: c++

我正在编写一个程序,该程序必须使用动态分配来编辑数组的元素。我有了第一个子程序,但是每当我尝试运行第二个子程序时,我都会看到一条错误消息

  

错误:无法将参数'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;
    }
}

在这种情况下使用指针以避免此错误的正确方法是什么?

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*aint*a[]等效于int**a