如何解决用C处理2个静态2d数组的正确方法是什么?
我有2个静态矩阵。 a [] [N]和b [] [M]。 N和M都是预先定义的,彼此不相等。现在我应该如何编写既可以接收它们又可以正常工作的函数?
void PrintStaticMatrix(int matrix[][??],int rows,int cols);
我需要放入??吗?天真的方法是将功能分为两个功能。它们将完全相同,但是一个用于N,另一个用于M。Howeve,这似乎没有任何意义。有没有更好的办法?我很想只使用动态数组,但是我们被迫参加高级C课程。
解决方法
如果您的编译器支持可变长度数组,则可以将函数声明为
void PrintStaticMatrix( int rows,int cols,int matrix[rows][cols] );
或
void PrintStaticMatrix( int rows,int matrix[][cols] );
或
void PrintStaticMatrix( int rows,int ( *matrix )[cols] );
另一种方法是例如使用动态分配的数组
int **matrix = malloc( rows * sizeof( int * ) );
for ( int i = 0; i < rows; i++ )
{
matrix[i] = malloc( cols * sizeof( int ) );
}
并声明类似的功能
void PrintStaticMatrix( int **matrix,int rows,int cols );
另一种方法是将二维数组重新解释为一维数组。在这种情况下,功能看起来像
void PrintStaticMatrix( int *matrix,int cols );
函数调用看起来像
PrintStaticMatrix( ( int * )matrix,rows,cols );
在函数中,您将处理一维数组。使用适当的表达式作为索引,您将能够在例如for循环中模拟二维数组。
否则,您将需要两个独立的功能,例如
void PrintStaticMatrix1( int matrix[][M],int rows );
和
void PrintStaticMatrix2( int matrix[][N],int rows );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。