如何在方法

时间:2016-09-16 04:33:00

标签: c++ arrays pointers multidimensional-array

首先,我制作了返回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中,我无法在Array S [i] [j]中获得正确的值。 当我将上面的方式改为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函数中得到正确的值?

(对不起我的傻瓜英语。)

1 个答案:

答案 0 :(得分:1)

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

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