通过引用传递3x3数组C ++错误:在初始化时无法将'double *'转换为'double'

时间:2014-11-03 12:57:22

标签: c++

我试图在C ++中通过引用传递一个3x3数组。但是当我这样做时,我得到错误错误:在初始化时无法将'double *'转换为'double'。我试图按照this page上的说明进行操作。我有一个for循环,但我不会使用它,直到我可以让数组正确通过:

void transpose(double (&arr)[3][3] )
{
    for (int counti = 0; counti < 3; counti++) {
        for (int countj = 0; countj < 3; countj++) {

            double i_swap = &arr[0][0];

        }
    }
}   

int main()
{
    double myarray[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    transpose(myarray);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

&是一个参考。你正试图设置一个你不能喜欢的双指针。

void transpose(double (&arr)[3][3] )
{
    for (int counti = 0; counti < 3; counti++) {
        for (int countj = 0; countj < 3; countj++) {

            double i_swap = arr[0][0];

        }
    }
}   

int main()
{
    double myarray[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    transpose(myarray);
    return 0;
}

Compiled

答案 1 :(得分:0)

似乎很好,只需要交换部分(您可以使用std::swap中的<algorithm>

void swap(double& a, double& b)
{
   double temp = a;
   a = b;
   b = temp;
}

注意for - 界限。最终代码:

for (int y=1; y<3; y++)
   for(int x=0; x<y; x++) {
      std::swap(mat[y][x], mat[x][y]);  // stl

      //swap(mat[y][x], mat[x][y]);     // calling your swap function

      //double temp = mat[y][x];        // no swap function
      //mat[y][x] = mat[x][y];
      //mat[x][y] = temp;
   }