如何从C函数返回2D数组?
所以我必须编写一个程序,对2d数组进行排序,然后返回它,但我刚刚发现不能从函数返回数组。我试着对此进行研究,但没有解决问题。谢谢你的帮助 下面是我编写的对垂直行进行排序的函数如何从C函数返回2D数组?,c,arrays,return,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
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;
}
int-vertSort(int-matrix[][51],int-size)
{
对于(c=0;c函数的返回类型应该是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;
}
int**vertSort(int矩阵[][51],int大小)
{
对于(c=0;c来说,正确的语法是不可能的混乱,因此我建议使用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(*ptr51)[51];
ptr51顶点排序(整数矩阵[][51],整数大小)
{
矩阵[0][2]=99;
矩阵[1][1]=88;
回报(矩阵);
}
内部主(空)
{
int test[2][51]={{10,20,30},{40,50,60};
ptr51输出=垂直排序(测试,0);
对于(int行=0;行<2;行++)
{
for(int col=0;col<3;col++)
printf(“%d”,输出[行][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矩阵[][51],int大小))[51]
{
矩阵[0][10]=99;
矩阵[1][50]=88;
回报(矩阵);
}
内部主(空)
{
int test[2][51]={{10,20,30},{40,50,60};
int(*输出)[51]=顶点排序(测试,0);
对于(int行=0;行<2;行++)
{
for(int col=0;col<51;col++)
printf(“%d”,输出[行][col]);
printf(“\n”);
}
}
您的代码不需要返回任何内容,它修改调用方的数组副本。(数组不能通过C中的值传递)。将int
返回类型更改为void
,一切都会好起来。返回?为什么?您正在将此数组传递到函数中。它可以作为2D指针返回。但r、c值仍然是单独返回的。为什么不将其作为引用传递。即使您可以从函数返回数组,也不会对您有任何好处,因为你不能在C中为数组赋值。for(r=0;我认为当int[][51]
作为int**
访问时,C会显示错误。要学究一点,这是一个警告,而不是一个错误(无论如何,带有叮当声),但您当然是对的;忽略警告是一种不好的做法,因此显式案例很好。+1忽略警告是一种不好的做法,但丢弃警告则是一种更糟糕的做法。如果将事件传递给vertSort()
实际上是一个二维数组,将其作为int**
返回并试图通过该指针访问它将是灾难性的。如果您实际传递的是int**
,则会出现同样的问题。该警告有一个很好的理由。这是完全错误的,数组与指针不同。静默使用强制转换的编译器警告不会产生魔力。感谢您的帮助!我将int返回类型切换为void,但现在当我尝试运行该程序时,底部出现了一个错误,表示警告“vertSort”的冲突类型也在原型中更改它