主函数中调用一个函数:
void fuction(int array[],length)
{
    //因为数组无法值传递,怕修改主函数中的数组,所以打算在function函数中新建一个数组来操作
    int _array[length];
}
结果出错,说cannot allocate an array of constant size 0改为
void function(int array[],length)
{
    int* _array;
    array = new int[length];
}
这样就可以了
我想问一下,为何第一种方式不能使用传过来的length,第二个却可以呢?

解决方案 »

  1.   

    int _array[len];   //len 需要是常量
    而如果
    new int[len]; //len不需要为常量,所以不会出错
      

  2.   

    int _array[length];  //这种方式是在栈上分配内存,length必须是常量。
    而你的函数里
    void fuction(const int array[], unsigned length) 

         int _array[length]; 
    } length是变量!这种情况只能在椎上动态分配(new,malloc,alloc,HeapAlloc等),如果怕不小心修改主函数中的数组元素的值,建议这样定义函数
    void fuction(const int array[], unsigned length) 如果不得已,一般也不必复制整个数组,只需如下这般就行喽:
    int tmp = array[2];
    tmp *= 5;...
    tmp = array[3];...