c - 如何正确使用数组函数

标签 c matrix

这是我编写的一个小程序,用于将 2 个方阵相加。

当我输入第二个矩阵时,第一个矩阵的值被更改,结果随后为假。它对于 2x2 矩阵效果很好,但对于任何更大的矩阵则效果不佳。 该算法在不使用函数的情况下也能很好地工作。 请帮我解决这个问题。

这是代码:

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

int n;
void PrintMatrix(int P[n][n])
{
    int i,j;
    for(i=0;i<n;i++)
    {
        printf("\n");
        for(j=0;j<n;j++)
        {
            printf("%d\t", P[i][j]);
        }
    }printf("\n");
}
void ReadMatrix(int P[n][n])
{
    int i,j;
    for(i=0;i<n;i++)
    {
    printf("input row %d\n", i+1);
        for(j=0;j<n;j++)
        {
        scanf("%d", &P[i][j]);
        }
    }
}
void AddMatrix(int P[n][n], int Q[n][n], int Result[n][n])
{
   int i,j;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
      {
        Result[i][j]=P[i][j]+Q[i][j];
      }
    }
}

int main()
{
    int i,j;
    int A[n][n];
    int B[n][n];
    int Sum[n][n];

    printf("input matrix size:");
    scanf("%d", &n);

    printf("input first matrix\n");
    ReadMatrix(A);
    PrintMatrix(A);

    printf("input second matrix\n");
    ReadMatrix(B);
    PrintMatrix(B);

    AddMatrix(A,B,Sum);
    PrintMatrix(Sum);
    return 0;
}

最佳答案

您可以使用结构体定义自己的矩阵类型,例如:

typedef struct
{
  int*    data;
  size_t  width;
  size_t  height
} matrix_t;

或者,如果你有一个现代的 C 编译器,你可以编写类似的函数

void func (size_t width, size_t height, int matrix[width][height])

但结构版本可能更受欢迎。

<小时/>

编辑

至于为什么你的程序有bug,你必须将n初始化为一个值。如果您在从用户处读取n之后将数组声明为大小为[n][n]的可变长度数组,那么它应该可以正常工作。 p>

关于c - 如何正确使用数组函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24550351/

相关文章:

python - SWIG:将 2d numpy 数组传递给 C 函数 f(double a[])

c - copy_from_user()的实现

c - C 中的字符串和字符串函数

c - 由于变量被更频繁地释放,使得较小的函数通常在内存方面更有效吗?

sorting - 如何找到矩阵排序的下界?

matlab - 用矩阵中的行索引替换非 NaN 值

c - 如何在 pthread 中使用 C popen

Scala 矩阵库计算大斐波那契数

r - 使用循环的矩阵乘法

android - 通过相机和矩阵镜像图像