c – 如何通过引用传递stdlib列表数组
我是C stdlib的初学者.我学习了stdlib教程,并使用stdlib列表创建的邻接列表实现了“Graph中连接组件的数量”.我想知道如何通过引用dfs函数传递这个列表数组?另外,我的一个朋友说,默认情况下它将通过引用传递.这是真的吗?请澄清.哪一个是对的?
例如: >我的列表数组:list< int> L [V]; (要么) >我的列表数组:list< int> L [V]; 解决方法
不完全的. 首先,让我们忘记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)的包装器. 此外,您的调用语法错误.
这会从列表数组中传递单个列表,并通过值/复制执行此操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |