尝试在数组上调用函数时引发“数组类型'int [4]'不可分配”错误

时间:2019-09-14 15:34:13

标签: c++

我写了一个函数,将数组的大小加倍

int *expand(int ar[], int curr_size) {
    int *new_array = new int[curr_size * 2];

    for (int i = 0; i < curr_size; i++)
        new_array[i] = ar[i];

    return new_array;
}

当我尝试使用它

int  main(){
    int ar[] = {1,2,3,4};
    ar = expand(ar, 4);
}

它引发以下错误:

  

数组类型'int [4]'不可分配

出什么问题了?


3 个答案:

答案 0 :(得分:2)

main()中,ar是固定大小的数组。您无法调整其大小或为其分配指针。您所能做的就是从中读取值,并将值写入其中。

对于您要尝试的操作,您需要先分配arnew[],再分配delete[],然后再为其分配新的指针

int main(){
    int *ar = new[4]{1,2,3,4};
    int *new_ar = expand(ar, 4);
    delete [] ar;
    ar = new_ar;
    delete [] ar;
}

最好使用std::vector处理此问题:

#include <vector>
int main(){
    std::vector<int> ar{1,2,3,4};
    ar.resize(ar.size()*2);
}

答案 1 :(得分:1)

c ++中的数组不会增长。它们的大小在编译时设置。使用std :: vector代替。

答案 2 :(得分:0)

雷米·勒博绝对正确。 您的代码可以像这样更改:

#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;

int *expand(int *ar,int curr_size){
    int *new_array = new int[curr_size*2];
    for (int i = 0; i < curr_size; i++){
        new_array[i] = ar[i];
    }
    delete [] ar;
    return new_array;
}

int main()
{

    int *ar = new int[4]{1,2,3,4};
    for (auto i=0;i<4;i++) {
        cout<<ar[i];
    }
    cout<<endl;
    ar = expand(ar,4);
    for (auto i=0;i<8;i++) {
        cout<<ar[i];
    }
    return 0;
}