gpt4 book ai didi

c++ - 按值传递 2D 数组不起作用

转载 作者:行者123 更新时间:2023-11-30 20:26:37 24 4
gpt4 key购买 nike

我正在尝试将二维数组传递给函数。我不想修改实际的数组。所以按值传递。但我实际的 2darray 正在被修改。(当我修改 myArray 时,x 正在被修改)。为什么会这样?

int main(int argc, const char* argv[])
{
int x[3][3];
x[0][0]=2;
x[0][1]=2;
x[0][2]=2;
x[1][0]=2;
x[1][1]=2;
x[1][2]=2;
x[2][0]=2;
x[2][1]=2;
x[2][2]=2;
func1(x);
}

void func1(int myArray[][3])
{
int i, j;
int ROWS=3;
int COLS=3;

for (i=0; i<ROWS; i++)
{
for (j=0; j<COLS; j++)
{
myArray[i][j] =3;
}
}
}

如果我们不知道两个维度,是否可以按值传递二维数组?

最佳答案

例如,您可以利用以下事实:复制或分配用户定义类型的实例时,该类型的数组也会被复制和分配

template <size_t N, size_t M>
struct Foo
{
int data[N][M];
};

template <size_t N, size_t M>
void func1(Foo<N, M> foo)
{
foo.data[1][2] = 42;
}

int main()
{
Foo<3, 3> f;
f.data[0][0]=2;
...
func1(f);
}

在这里,func1foo 的本地拷贝,它有自己的数组拷贝。我已经使用模板来概括为任意大小。

请注意,C++ 提供 std::array模板,您可以使用它来代替 Foo ,所以在实际代码中你会做这样的事情:

#include <array>

template <typename T, size_t N, size_t M>
void func1(std::array<std::array<T, N>, M> arr)
{
arr[1][2] = 42;
}

int main()
{
std::array<std::array<int, 3>, 3> a;
a[0][0]=2;
...
func1(a);
}

如果您受困于 C++11 之前的实现,您可以使用 std::tr1::array (来自 boost 库的标题 <tr1/array>boost::array。这也是一个很好的练习来推出您自己的。

关于c++ - 按值传递 2D 数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25239203/

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