gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:30:58 28 4
gpt4 key购买 nike

首先,我创建了返回 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 方式更改为 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)。

关于c++ - 如何在方法中返回 C++ 数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39523791/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com