我无法通过引用将动态分配的数组传递给函数。 "数组应通过引用"传输到函数。 我的程序应该采用n个整数并找出最小值。应将该最小值添加到用户输入的所有阵列中。但BY REFERENCE部分让我失望。我试过(int& x [],int& n)但是失败了。 请帮助,非常感谢。
void add_min(int x[], int n)
{
int add[n];
int mini = x[0];
int i;
for(i = 0; i < n; i++)
{
if(x[i] < mini)
{
mini = x[i];
}
}
for(i = 0; i < n; i++)
{
add[i] = x[i] + mini;
}
for(i = 0; i< n ; i++)
{
cout<<add[i]<<endl;
}
}
int main()
{
int *x;
int n;
cout<<"Enter the amount of integers"<<endl;
cin>>n;
x = new int[n];
cout<<"Enter the integers"<<endl;
for(unsigned i = 0; i < n; i++)
{
cin>>x[i];
}
add_min(x,n);
delete x;
return 0;
}
答案 0 :(得分:2)
动态分配的数组不能在命名变量中,也不能引用一个。
当你调用new[]
时,数组被分配在内存中的某个地方,并且该调用返回该数组中第一个对象的地址。您将地址存储在指针变量中。指针不是数组,只是指向第一个元素。
您可以通过引用传递指针,如下所示:
void foo(int*& ptr)
如果您的作业要求您通过引用传递数组,那么您可能无法动态分配数组。在这种情况下,这就是您将参数声明为对数组的引用的方式:
void foo(int (&arr)[10])
请注意,必须在编译时知道大小。您可以使用模板参数为不同大小的数组生成函数。
如果赋值确实要求您动态分配数组,那么它们可能会让您通过引用传递指针。
答案 1 :(得分:0)
我在这里看到的问题是通过引用传递以下内容:
动态分配数组
动态分配的唯一方法是通过返回指针。您正确猜到的将数组传递给函数的语法是:
void add_min(int x[], int n) { ... }
当然,您可以将数组视为指针,然后得到:
void add_min(int* x, int n) { ... }
现在出现了引用
的问题通过引用应用程序传入数组的语法是:
void add_min(int (&x)[3]) { ... }
但在这种情况下,您需要实际知道它的大小,因此不会动态分配数组。
为了避免了解数组大小的需要,我们可以做一些模板魔法,比如:
template<int n>
void add_min(int (&x)[n]) { ... }
但同样,这需要使用静态分配的数组(int x[124]
)调用,而不是动态数组。
但是数组总是通过引用传入,它们永远不会被复制到堆栈中,所以你的代码版本是正确的。
答案 2 :(得分:0)
首先,您使用的是C ++,因此您不应该使用指针std::vector
。它会更容易,你不会造成内存泄漏。
其次,你传递指针,而不是数组。不一样:https://stackoverflow.com/a/1641963/1351828
所以你要指向第一个元素的指针。如果您想更改&#39;数组&#39;你可以按值传递指针。如果你想分配新的阵列&#39;并在函数中更改它,通过引用传递指针:
void add_min(int &x[], int n)