[英]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.