将一个二维数组赋值给另一个数组

3

在我的程序中,我有一个函数,它传递了一个二维数组,并且我想将另一个二维数组设置为该二维数组。我正在用C++编写代码,但无法正确使用语法。目前我有以下代码:

void MyFunction(float **two_d_array){
    float newArray[4][4];
    //Set new array equal to two_d_array
}

two_d_array始终是4x4,因此维度本身不是问题。


有什么问题吗?你遇到了错误吗?如果是,错误信息是什么?还是我们要猜测? - user93353
3个回答

6
我希望您不会将二维数组作为双指针传递给函数。
无论如何,您可以直接编写:
for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
        newArray[i][j] = two_d_array[i][j];

如果你有另一个二维数组(而不是指针数组),那么只需使用 memcpy()

void foo(float arr[][4])
{
    float newArray[4][4];
    memcpy(newArray, arr, sizeof(newArray));
}

谢谢你的帮助。但是将它作为双指针传递有什么问题吗?访问元素的语法不会改变,对吧? - user1855952
@user1855952 语法会保持不变,只是语义不同。数组不是指针,指针也不是数组,而且二维数组不会退化成双重指针,而是会退化成一个指向第二维大小的数组的指针。 - user529758
由于我们使用的是C++,我建议通过引用传递数组以避免丢失范围信息。typedef double d4x4[4][4]; void foo(d4x4& arr)。这可以防止传入double [1] [4],从而挽救你的生命。 - Balog Pal
1
@BalogPal 由于我们在使用 C++,你完全可以避免使用数组,而是使用 std::vector<std::vector<float> > - user529758
@H2CO3:我猜你真正想说的是std::array,vector在太多方面都不同。array是一个很好的替代品,但你必须全部替换,如果现有代码已经使用了C风格数组,最好不要添加新函数。但采用引用会使它更加健壮。 - Balog Pal

1

当你定义一个二维数组为

float a[4][4]

它的类型是 float [4][4]。

如果您想将 float** 传递给函数,可以创建您自己的 float**。

float** f = (float**) malloc(sizeof(float *)*4);
    for(int i=0;i<4;i++){
      f[i] = (float*) malloc(sizeof(float)*4);
    }
//initialize
MyFunction(f);

而且Myfunction会类似

void MyFunction(float **two_d_array){
    float newArray[4][4];
    for(int i=0;i<4;i++){
        float* one_d = & two_d_array[i][0];
        for(int j=0;j<4;j++){
            newArray[i][j] = one_d[j];
        }   
    }

}

0

是的,你必须分配第二个维度,并且通过整数参数传递第一个维度,它看起来像这样: void foo(float arr[][4], int dim);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接