如何通过引用C ++传递动态数组

时间:2016-10-08 05:32:56

标签: c++ function pointers dynamic dynamic-arrays

我无法理解如何通过C ++中的引用传递动态数组。

我在这个小的隔离代码示例中重新创建了问题:

#include <iostream>

using namespace std;

void defineArray(int*);

int main()
{
    int * myArray;
    defineArray(myArray);

    /** CAUSES SEG FAULT*/
    //cout<<(*(myArray)); //desired output is 0
    return 0;
}

void defineArray(int*myArray)
{
    int sizeOfArray;
    cout<<"How big do you want your array:";
    cin>>sizeOfArray;

    /** Dynamically allocate array with user-specified size*/
    myArray=new int [sizeOfArray];

    /** Define Values for our array*/
    for(int i = 0; i < sizeOfArray; i++)
    {
        (*(myArray+i))=i;
        cout<<(*(myArray+i));
    }
}

2 个答案:

答案 0 :(得分:4)

myArray按值传递,myArray上的任何修改(例如myArray=new int [sizeOfArray];)都与myArray中的原始变量main()无关仍然悬空。

要通过引用传递,请更改

void defineArray(int*myArray)

void defineArray(int*& myArray)

答案 1 :(得分:-1)

这个解决方案毫无希望地复杂化了。您不需要new[],指针甚至参考参数。在C ++中,&#34;动态数组的概念&#34;最好由std::vector表示,您只能将其用作返回值:

#include <iostream>
#include <vector>

std::vector<int> defineArray();

int main()
{
    auto myArray = defineArray();
    if (!myArray.empty())
    {
        std::cout << myArray[0] << "\n";;
    }
}

std::vector<int> defineArray()
{
    int sizeOfArray;
    std::cout << "How big do you want your array:";
    std::cin >> sizeOfArray;

    std::vector<int> myArray;
    for (int i = 0; i < sizeOfArray; i++)
    {
        myArray.push_back(i);
        std::cout<< myArray[i] << "\n";
    }
    return myArray;
}

push_back将足够智能地工作,而不是一直分配新的内存。如果这仍然与您有关,那么您可以在添加元素之前调用reserve