[英]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.