首先,我制作了返回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函数中得到正确的值?
(对不起我的傻瓜英语。)
答案 0 :(得分:1)
问题是你在函数中有一个static
局部变量,这意味着对函数的所有调用将共享同一个数组并修改同一个数组,这意味着只有最后一次调用中设置的值才会是你使用的那些。
解决问题的一种方法是进行动态分配并单独复制值,就像在工作示例中一样。另一种可能的解决方案是使用具有适当复制语义的另一种数据结构,例如, std::pair
或std::tuple
,并且函数中没有任何静态数组(或任何static
)。