gpt4 book ai didi

c++ - 将二维数组传递给函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:42 25 4
gpt4 key购买 nike

我正在尝试将两个二维数组(大小相同;8 x 4)传递给一个函数,并将一个数组设置为与另一个数组相等(一些元素的顺序不同,但这并不重要)。到目前为止,我有:

int main() {
double** Array1;
double** Array1;

// MALLOC BOTH OF THEM
....

// PUT STUFF IN ARRAY1
....

CopyFunction(&Array1, &Array2);
}

void CopyFunction(double*** Array1, double*** Array2) {
for (int i = 0; i < 8; i++) {
*Array2[i][0] = *Array1[i][0];
*Array2[i][1] = *Array1[i][1];
*Array2[i][2] = *Array1[i][2];
*Array2[i][3] = *Array1[i][3];
}
}

但我收到这样的段错误:

 *** Break *** segmentation violation


===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================

最佳答案

你想要:

    (*Array2)[i][0] = (*Array1)[i][0];
(*Array2)[i][1] = (*Array1)[i][1];
(*Array2)[i][2] = (*Array1)[i][2];
(*Array2)[i][3] = (*Array1)[i][3];

如其所写,由于操作顺序,您没有以正确的顺序取消引用数组。 [i][N] 完成的取消引用发生在 * 之前。原始版本与执行 *(*(*(Array1 + i) + N)) 相同(由于 [] 的实际工作方式),但您想要什么类似于 *(*(*Array1 + i) + N),这就是为什么您必须像我一样添加括号。

不过,更好的是:

void CopyFunction(double** Array1, double** Array2) {
for (int i = 0; i < 8; i++) {
Array2[i][0] = Array1[i][0];
Array2[i][1] = Array1[i][1];
Array2[i][2] = Array1[i][2];
Array2[i][3] = Array1[i][3];
}
}

比这更好的是:

std::copy_n(*Array1, 32, *Array2);

编辑:虽然 std::copy_n 并不真正适合您,但如果您在复制时更改某些元素的顺序。

关于c++ - 将二维数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420183/

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