传递矩阵作为参数

Nic*_*ick 5 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;
}

 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;
 }
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Dan*_*n F 6

我知道这样做的唯一安全方法是在参数中包含矩阵尺寸,或者制作某种矩阵结构

选项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;
}
Run Code Online (Sandbox Code Playgroud)

选项B)使用结构

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]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用带有动态边界作为参数的真实二维矩阵来表示`void f(size_t n,int m [3] [n])`这样的接口.你可以看看https://gustedt.wordpress.com/2011/01/13/vla-as-function-arguments/ (4认同)