C 传递矩阵作为参数

C 传递矩阵作为参数,c,matrix,c89,C,Matrix,C89,我想传递两个矩阵作为参数。这些矩阵有不同的大小,我不知道如何进行这项工作: #include <stdio.h> #include <stdlib.h> void f(int m[3][], int n); int main() { int A[3][3]={{1,2,3},{4,5, 6},{7,8,9}}; int B[3][2]={{1,2},{3, 4}, {5, 6}}; f(A, 3); f(B, 2); return 0; }

我想传递两个矩阵作为参数。这些矩阵有不同的大小,我不知道如何进行这项工作:

#include <stdio.h>
#include <stdlib.h>


void f(int m[3][], int n);

int main()
{
  int A[3][3]={{1,2,3},{4,5, 6},{7,8,9}};
  int B[3][2]={{1,2},{3, 4}, {5, 6}};

  f(A, 3);
  f(B, 2);

  return 0;
}

 void f(int m[3][], int n)
 {
    int i,j;
    for(i=0;i<3;i++)
    {
      for(j=0;j<n;j++)
       printf("%5d", m[i][j]);
    }
    return;
 }
#包括
#包括
无效f(int m[3][],int n);
int main()
{
int A[3][3]={{1,2,3},{4,5,6},{7,8,9};
int B[3][2]={{1,2},{3,4},{5,6};
f(A,3);
f(B,2);
返回0;
}
无效f(整数m[3][],整数n)
{
int i,j;

对于(i=0;i我知道的唯一安全的方法是在参数中包含矩阵维数,或者制作某种矩阵结构

选项A)尺寸作为参数

void f(int **m, int w, int h )
{
    int i,j;
    for(i=0;i<w;i++)
    {
      for(j=0;j<h;j++)
         printf("%5d", m[i][j]);
    }
    return;
}
void f(整数**m,整数w,整数h)
{
int i,j;
对于(i=0;ih;++j)
{
printf(%5d“,m->m[i][j]);
}
}
}

什么不起作用?您是否遇到编译时错误?您使用的是C语言还是某些特定于编译器的方言?根据编译器配置为接受的语言版本,向函数传递矩阵参数的方式有所不同。@HunterMcMillen yes main.C | 5 |错误:数组类型的元素不完整type/main.c | 12 |错误:形式参数1的类型是不完整的检查。对于C89,您的答案是可以的,我只想指出,对于C99,存在更简单的解决方案。我不熟悉C99标准。出于好奇,C99中添加了什么可以使解决方案更简单?您可以使用类似
void f(size\t n,int m[3][n]的接口)
使用动态边界作为参数的实数2D矩阵。您可以查看
typedef struct Matrix
{
    int w, h;
    int** m;
} Matrix;

void f ( Matrix *m )
{
    for ( int i = 0; i < m->w; ++i )
    {
        for ( int j = 0; j < m->h; ++j )
        {
            printf(%5d", m->m[i][j]);
        }
    }
}