繁体   English   中英

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

[英]How to return a 2D array from a C function?

因此,我必须编写一个对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;


}

您的代码不需要返回任何内容,它可以修改调用方的数组副本。 (数组不能按C中的值传递)。 int返回类型更改为void ,一切都会好起来的。

正确的语法是不可能的,因此建议使用如下所示的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" );
    }
}

函数的返回类型应为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;


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM