C将2d数组传递给函数

时间:2014-11-02 19:52:43

标签: c arrays function matrix

我得到了一项要求我编写两个C函数的作业:

1 - Read a matrix from the user.
2 - Write a matrix to the console.

未指定矩阵尺寸,因此我无法使用以下内容:

void matwrite(float m[3][3]) { ... }

这种情况有什么解决方法吗?

2 个答案:

答案 0 :(得分:-1)

函数签名应该是这样的:

void matwrite(float** m, int w, int h);

然后你可以迭代这样的元素:

for (int i = 0; i < w; ++i) {
  for (int j = 0; j < h; ++j) {
    cout << m[i][j] << " "; // For example
  }
  cout << "\n";
}

您可以使用数组及其尺寸调用函数,例如:

float arr[][3] = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9},
  {1, 2, 3}
};

matwrite(arr, 4, 3);

答案 1 :(得分:-1)

您可以在C中使用可变长度数组。

这些功能看起来像

void ReadMatrix( size_t n, float m[][n] );
void WriteMatrix( size_t n, float m[][n] );

例如

float m[3][3];

ReadMatrix( 3, m );
WriteMatrix( 3, m );

如果可能存在不是方阵的矩阵,则需要在函数中再添加一个参数。例如

void ReadMatrix( size_t m, size_t n, float m[][n] );
void WriteMatrix( size_t m, size_t n, float m[][n] );

这是一个示范程序

#include <stdio.h>

void ReadMatrix( size_t n, float m[][n] )
{
    for ( size_t i = 0; i < n; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            scanf( "%f", &m[i][j] );
        }
    }
}

void WriteMatrix( size_t n, float m[][n] )
{
    for ( size_t i = 0; i < n; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            printf( "%f ", m[i][j] );
        }
        puts( "" );
    }
}

int main(void) 
{
    float m[3][3];

    ReadMatrix( 3, m );
    WriteMatrix( 3, m );

    return 0;
}