所以我必须编写一个对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;
}
答案 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;
}