如何从C函数返回2D数组?

时间:2014-10-24 02:59:35

标签: c arrays return

所以我必须编写一个对2d数组进行排序然后返回它的程序,但我发现你不能从函数返回一个数组。我试过研究这个,但没有解决问题。任何帮助表示赞赏,谢谢。

下面是我编写的用于对垂直行进行排序的函数。

int vertSort(int matrix[][51], int size)
{
    for(c=0;c<size;c++)
    {

        for(r=0;r<size-1;r++)
        {
            if(matrix[c][r]>matrix[c][r+1])
            {
                printf("Swap row %d column %d with row %d column %d", r, c, r, c)
                int tmp=matrix[c][r];
                matrix[c][r]=matrix[c][r+1];
                matrix[c][r+1]=tmp;


            }

        }
    }
    return matrix;


}

3 个答案:

答案 0 :(得分:3)

您的代码不需要返回任何内容,它会修改调用者的数组副本。 (数组不能通过C中的值传递)。将int返回类型更改为void,一切顺利。

答案 1 :(得分:0)

正确的语法是不可能的混乱,所以我建议使用如下所示的typedef

typedef int (*ptr51)[51];

ptr51 vertSort( int matrix[][51], int size )
{
    matrix[0][2] = 99;
    matrix[1][1] = 88;
    return( matrix );
}

int main( void )
{
    int test[2][51] = { { 10, 20, 30 }, { 40, 50, 60 } };

    ptr51 output = vertSort( test, 0 );

    for ( int row = 0; row < 2; row++ )
    {
        for ( int col = 0; col < 3; col++ )
            printf( "%d ", output[row][col] );
        printf( "\n" );
    }
}

这是没有typedef

的不可思议的混乱语法
int (*(vertSort( int matrix[][51], int size )))[51]
{
    matrix[0][10] = 99;
    matrix[1][50] = 88;
    return( matrix );
}

int main( void )
{
    int test[2][51] = { { 10, 20, 30 }, { 40, 50, 60 } };

    int (*output)[51] = vertSort( test, 0 );

    for ( int row = 0; row < 2; row++ )
    {
        for ( int col = 0; col < 51; col++ )
            printf( "%d ", output[row][col] );
        printf( "\n" );
    }
}

答案 2 :(得分:-1)

函数的返回类型应为int **,并将类型转换为int **。它应该适合你。

int** vertSort(int matrix[][51], int size)
{
     for(c=0;c<size;c++)
     {

        for(r=0;r<size-1;r++)
        {
             if(matrix[c][r]>matrix[c][r+1])
             {
                printf("Swap row %d column %d with row %d column %d", r, c, r, c)
                int tmp=matrix[c][r];
                matrix[c][r]=matrix[c][r+1];
                matrix[c][r+1]=tmp;


              }

         }
    }
    return (int **)matrix;


}