猿问

如何从函数返回数组?

如何从函数返回数组?

如何从方法返回数组,我该如何声明它?

int[] test(void); // ??


弑天下
浏览 410回答 3
3回答

不负相思意

int* test();但使用向量将是“更多C ++”:std::vector< int > test();编辑我会澄清一些观点。既然你提到了C ++,我会new[]和delete[]运营商一起使用,但与malloc / free一样。在第一种情况下,你会写一些类似于:int*&nbsp;test()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;int[size_needed];}但这并不是一个好主意,因为你的函数的客户端并不真正知道你要返回的数组的大小,尽管客户端可以通过调用来安全地释放它delete[]。int*&nbsp;theArray&nbsp;=&nbsp;test();for&nbsp;(size_t&nbsp;i;&nbsp;i&nbsp;<&nbsp;???;&nbsp;++i)&nbsp;{&nbsp;//&nbsp;I&nbsp;don't&nbsp;know&nbsp;what&nbsp;is&nbsp;the&nbsp;array&nbsp;size! &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...}delete[]&nbsp;theArray;&nbsp;//&nbsp;ok.这个更好的签名是:int*&nbsp;test(size_t&&nbsp;arraySize)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;array_size&nbsp;=&nbsp;10; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;int[array_size];}您的客户端代码现在将是:size_t&nbsp;theSize&nbsp;=&nbsp;0;int*&nbsp;theArray&nbsp;=&nbsp;test(theSize);for&nbsp;(size_t&nbsp;i;&nbsp;i&nbsp;<&nbsp;theSize;&nbsp;++i)&nbsp;{&nbsp;//&nbsp;now&nbsp;I&nbsp;can&nbsp;safely&nbsp;iterate&nbsp;the&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...}delete[]&nbsp;theArray;&nbsp;//&nbsp;still&nbsp;ok.由于这是C ++,`std :: vector <T>是一个广泛使用的解决方案:std::vector<int>&nbsp;test()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;std::vector<int>&nbsp;vector(10); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;vector;}现在你不必调用delete[],因为它将由对象处理,你可以安全地迭代它:std::vector<int>&nbsp;v&nbsp;=&nbsp;test();std::vector<int>::iterator&nbsp;it&nbsp;=&nbsp;v.begin();for&nbsp;(;&nbsp;it&nbsp;!=&nbsp;v.end();&nbsp;++it)&nbsp;{ &nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;your&nbsp;things}这更容易,更安全。

炎炎设计

无法从C ++函数返回数组。8.3.5 [dcl.fct] / 6:函数不应具有类型数组或函数的返回类型[...]最常选择的替代方法是返回类类型的值,其中该类包含数组,例如struct&nbsp;ArrayHolder{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;array[10];};ArrayHolder&nbsp;test();或者,为了返回指向静态或动态分配的数组的第一个元素的指针,文档必须向用户指示他是否需要(以及如果他应该如何)释放返回的指针所指向的数组。例如int*&nbsp;test2(){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;int[10];}int*&nbsp;test3(){ &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;int&nbsp;array[10]; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;array;}尽管可以返回引用或指向数组的指针,但它非常罕见,因为它是一种更复杂的语法,与上述任何方法相比没有实际优势。int&nbsp;(&test4())[10]{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;int&nbsp;array[10]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;array;}int&nbsp;(*test5())[10]{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;int&nbsp;array[10]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&array;}
随时随地看视频慕课网APP
我要回答