我是C stdlib的初学者.我学习了stdlib教程,并使用stdlib列表创建的邻接列表实现了“Graph中连接组件的数量”.我想知道如何通过引用dfs函数传递这个列表数组?另外,我的一个朋友说,默认情况下它将通过引用传递.这是真的吗?请澄清.哪一个是对的?
例如:
>我的列表数组:list< int> L [V];
>我的函数调用:dfs(L [v],k);
>我的函数定义:void dfs(list< int> List,int index);
>我的函数原型:void dfs(list< int> L,int);
(要么)
>我的列表数组:list< int> L [V];
>我的函数调用:dfs(L,k);
>我的函数定义:void dfs(list< int> * L,int index);
>我的函数原型:void dfs(list< int> *,int);
最佳答案
I wanted to know how to pass this array of list by reference to dfs function? Also, one of my frnd said that by default it will be passed by reference.
不完全的.
首先,让我们忘记std :: list;这只是令人困惑的问题.
假装你正在传递一个int数组:
void foo(int[] x);
int main() {
int x[5];
foo(x);
}
这里没有引用,默认情况下会复制C参数,但是因为数组无法复制,并且因为数组的名称衰减到指向数组中第一个元素的指针的名称,所以你传递的是[副本] a]指针不是数组本身.
实际上,void foo(int [] x)对于等效的,并且更清晰的void foo(int * x)具有误导性的语法糖.
特别注意 – 在两种情况下 – 函数foo都不知道原始数组的维度.
但是,这有点老式,你可以将实际引用传递给数组:
void foo(int (&x)[5]);
int main() {
int x[5];
foo(x);
}
现在我们可以将相同的逻辑应用于std :: list的数组:
void foo(std::list<int>*); // pointer to one or more lists, OR
void foo(std::list<int> (&)[5]); // reference to an array of five lists
无论如何,混合标准容器和阵列似乎很奇怪;如果由于某种原因确实需要自动存储持续时间,则首选数组上的std :: vector,或者静态分配数组(如std :: array或以前的boost :: array)的包装器.
此外,您的调用语法错误.
My function call: dfs(L[v],k);
My function definition: void dfs(list List, int index);
这会从列表数组中传递单个列表,并通过值/复制执行此操作.