返回2个数组的函数(按引用传递)

时间:2018-02-23 13:17:53

标签: c++ arrays

我必须在c ++中执行一个函数,通过从引用传递它们来返回2个数组。 我不知道,似乎没有人也有。 你能帮我写一个例子吗? 我很想做

int *vettore=new int[5];
return vettore

买它只返回一个。 Tnx提前。

3 个答案:

答案 0 :(得分:3)

让我们暂时忘掉数组,因为那是另一回事。让我们专注于返回两种简单类型,例如:返回两个整数。

显然这不会起作用(因为......不是python):

int, int foo()
{
   int a = ...
   int b = ...

   return a, b;
}

那么如果你想在C ++中返回多个值,你会选择哪些选项?

选项1.返回课程

你可以"捆绑"您在类中的值,如果有意义,可以为它们创建一个新类,或者只使用std::pairstd::tuple

std::pair<int, int> foo()
{
   int a = ...;
   int b = ...;

   return {a, b}
}

选项2.使用&#34; out&#34;参数。

您可以通过引用传递参数,从而可以从外部修改函数对象。 E.g:

void foo(int& a, int& b)
{
   a = ...;
   b = ...;
}

我认为这就是你老师的意思&#34;通过引用传递&#34;。

好的,阵列怎么样?

回答这个问题很棘手,因为arrays并不清楚你的意思,并且不鼓励使用某些含义。

我将从最推荐的,到被认为是不良的做法甚至是错误的开始:

std::vector

用于在C ++中表示数组的事实类型应始终为std::vector。因此,您通过引用返回的要求可能意味着:

void foo(std::vector<int>& v1, std::vector<int&>& v2);

std::array

或者,如果在编译时已知数组的大小:

void foo(std::array<int, 24>& a1, std::array<int, 24>& a2);

C指针

好的,现在我们处于沮丧的境地。 不要这样做,除非安抚不合理的老师或课程:

void foo(int* &v1, int* &v2)
{
   v1 = new int[11];
   v2 = new int[24];
   ...
}

C数组

void foo(int (&a)[11], int (&a2)[24]);

答案 1 :(得分:0)

你可以这样做:

return std::make_pair(array1,array2);

您需要#include <utility>

要访问数组,请使用pair.first或pair.second

示例:

#include <utility>  //std::pair
#include <iostream> //std::cout 
std::pair<int*,int*> returnpair(){ 
    int arr1[3] = {1,2,3};
    int arr2[3] = {4,5,6};
    return std::make_pair(arr1,arr2);
 } 
int main(){ 
    std::pair<int*,int*> pair= returnpair();
    std::cout<<pair.first[1]; //access 2nd member of arr1
}

输出:

2

参考: http://www.cplusplus.com/reference/utility/pair/

答案 2 :(得分:0)

您可以通过返回C / C ++中可接受的结构节点指针来实现。

以下是节点的示例代码:

func test1() {
    action1()
    logoutAction()
}

func test2() {
    action2()
    logoutAction()
}

func test3() {
    action3()
    logoutAction()
}

来到这个职能部门:

 struct node {
   int a[100];
   int b[100];
};

在main中:您可以按如下方式访问数组:

struct node* fun() {
      struct node* ptr;  
     // write your code
     return ptr;
}

希望有所帮助