如何在方法中返回c++数组指针

How to return C++ Array Pointer in method

本文关键字:c++ 数组 指针 返回 方法      更新时间:2023-10-16

首先,我做了一个返回Array[2]指针的函数。

int* ReturnArray(int a, int b) {
    static int Array[2];

    Array[0] = a;
    Array[1] = b;
    return Array;
}

我在Main中创建了一个简单的二维数组。

int a, b;
in >> NumberOfSize;
int** S = new int*[NumberOfSize];
for (int i = 0; i < NumberOfSize; i++)
    S[i] = new int[2];

最后,我添加了ReturnArray(a,b)来设置S[I]的值

for (int i = 0; i < NumberOfSize; i++)
{
    in >> a >> b;
    S[i] = ReturnArray(a, b);
}

但是在Main中,我无法在数组S[I][j]中获得正确的值。当我将upper way改为under时,我可以在数组s中设置正确的值

for (int i = 0; i < NumberOfSize; i++)
{
    in >> a >> b;
    S[i][0] = ReturnArray(a, b)[0];
    S[i][1] = ReturnArray(a, b)[1];
}

上面发生了什么?

和我怎么能得到正确的值在只有一个调用ReturnArray函数?

(抱歉我的英语很笨)

问题是你在函数中有一个static局部变量,这意味着对函数的所有调用将共享相同的数组并修改相同的数组,这意味着只有在最后一次调用中设置的值将是你使用的。

解决这个问题的一种方法是执行动态分配并分别复制值,就像您在工作示例中所做的那样。另一种可能的解决方案是使用另一种具有适当复制语义的数据结构,例如std::pairstd::tuple,并且在函数中没有任何静态数组(或任何static)。