簡體   English   中英

如何通過參考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]; )都與原始變量無關, main() myArray仍然懸空。

要使其通過引用傳遞,請進行更改

void defineArray(int*myArray)

void defineArray(int*& myArray)

該解決方案是無可救葯的。 您不需要new[] ,指針甚至引用參數。 在C ++中,“動態數組”的概念最好由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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM