【发布时间】:2019-09-30 16:25:12
【问题描述】:
我的问题基本上是这个问题Proper way to pass dynamic arrays to other functions的后续问题。这里询问将动态数组传递给函数的正确方法。给出了三个选项:
void test(bool arr[])
void test(bool *arr)
void test(bool *&arr)
前两个通过值传递(数组的)指针,第二个通过引用传递指针。 All 可用于更改数组的内容,如alestanis 的回答所示。
现在我的问题是,如果您想在函数内动态分配数组,那么正确的方法是什么。所以是这样的:
void init(double ?arr?, int n){
arr = new double[n];
}
void main(){
double * array;
init(array,15);
}
我相信它只适用于最后一种语法,但我不确定。
此外,如果您有一个矩阵,我想知道最后一种语法会是什么样子。你有两个& 吗?还是根本不可能?
附:我有不同的大向量和矩阵,所以我宁愿使用常规数组而不是标准的东西。向量和矩阵的大小是用户的输入值,向量和矩阵仅在输入完成后创建,因此我无需调整向量/矩阵的大小。
【问题讨论】:
-
开箱即用:使用
std::vector。std::vector将为您处理内存分配和释放。它具有与数组相同的访问运算符。如果你想修改它,你甚至可以通过引用传递。 -
我有不同的大向量和矩阵,所以我宁愿使用常规数组而不是 std 的东西 - 如果这是与性能相关的,你不会失去任何东西切换到
std::vector如果你正确使用它。另一方面,您在安全等方面获得了很多。 -
写有
std的东西,没有。然后编译、分析和比较结果。vector应该留下的只是初始化期间的一个小插曲。这是否重要取决于要求。 -
@user4581301 -- 有时向量会提高代码的速度,尤其是如果原始非向量代码一遍又一遍地使用
new[]和delete[]而不是一个向量并做一个简单的@ 987654332@. -
我更喜欢
double* array = make_double_array(15);而不是输出参数。 (但更好的是std::vector或至少std::unique_ptr)。