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

How to pass Dynamic Array by reference C++

我无法理解如何在 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));
    }
}

myArray是传值本身,对myArray的任何修改(如myArray=new int [sizeOfArray];)与原变量无关,myArraymain() 仍然悬空。

要使其通过引用传递,请更改

void defineArray(int*myArray)

void defineArray(int*& myArray)

这个解决方案非常复杂。您不需要 new[]、指针甚至引用参数。在 C++ 中,"dynamic arrays" 的概念最好用 std::vector 表示,您可以将其用作 return 值:

#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