从C中的void函数返回2d数组

时间:2015-03-15 19:39:57

标签: c arrays function 2d

我有一个看起来像这样的函数:

void swapRows(int row_1, int row_2, double **matrix, int n, int m)
{
   double arrTemp = (double *)malloc(m * sizeof(double));
   int i;   

   for(i = 0; i < m; i++)
   {
      arrTemp[i] = matrix[row_1][i];
      *matrix[row_1][i] = matrix[row_2][i];
   }

   for(i = 0; i < m; i++)
   {
    *matrix[row_2][i] = arrTemp[i];
   }

}

我尝试使用两颗星和一颗星取消引用数组,但无法弄明白。我不想将它存储在另一个数组中并通过双重函数返回它,我需要从这个void函数返回它。我只是在数组中交换行,需要将修改后的数组返回到main函数。

1 个答案:

答案 0 :(得分:4)

只要您只更改数组中的值,就不需要做任何特殊的操作。删除函数中的所有*并访问数组,就像不想“返回”它一样。

void swapRows(int row_1, int row_2, double **matrix, int n, int m){
    double arrTemp = (double *)malloc(m * sizeof(double));
    int i;  
    for(i = 0; i < m; i++){
        arrTemp[i] = matrix[row_1][i];
        matrix[row_1][i] = matrix[row_2][i]; //no *
    }
    for(i = 0; i < m; i++){
        matrix[row_2][i] = arrTemp[i]; //no *
    }
}

无关的问题,你在这里错过了这个malloc的自由。
而且,正如WhozCraig指出的那样,在double **matrix中,每行都是单独分配的,你可以只切换行指针。

void swapRows(int row_1, int row_2, double **matrix, int n, int m){
    double *tmp = matrix[row_1];
    matrix[row_1] = matrix[row_2];
    matrix[row_2] = tmp;
}