【问题标题】:How to write a square matrix multiplication function in C? [duplicate]如何用C编写方阵乘法函数? [复制]
【发布时间】:2022-01-15 01:29:01
【问题描述】:
int Ma_Multiplication(int A[][], int B[][], int size){
    int C[size][size];
    for( i = 0 ; i< size ; ++i){
        for( j=0 ; j< size ; ++j){
            C[i][j] = 0;
            for( k = 0 ; k < size; ++k)
                C[i][j] = C[i][j] + (A[i][k]*B[k][j]);
                printf("%d ",C[i][j]);           
            printf("\n");
        }
}

我写了这个函数来计算 2 个矩阵的乘法。但是当我调试时,它告诉我:

error: array type has incomplete element type 'int[]'        
    4 | int MATRIX(int A[][], int size){
      |                ^

谁能解释一下?非常感谢!

【问题讨论】:

  • A[]][] 不是有效的 C 语法。编译器不知道如何在汇编器中翻译它。
  • 那么怎么添加呢?我想使用函数,因为我已经用直接代码完成了。
  • int mult(int size, int A[size][size], int B[size][size])这样声明函数
  • 如果您一次只使用它打印一个项目,为什么需要将C 设为二维数组?

标签: c


【解决方案1】:

C 不允许声明具有不完整类型元素的数组。因此int A[] 可以。但是int A[][]并不是因为它的元素类型是int[]不完整。

要修复,我建议使用 VLA 类型完全定义参数:

int Ma_Multiplication(int size, int A[size][size], int B[size][size]) {
  ...
}

如果您想保持参数的原始顺序,您必须使用允许声明参数的扩展(GCC 和 CLANG)。

int Ma_Multiplication(int size; int A[size][size], int B[size][size], int size)

此扩展可能会被纳入即将发布的 C23 标准

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2020-04-15
    • 2017-01-18
    • 2017-02-13
    • 2021-10-13
    • 2021-05-02
    相关资源
    最近更新 更多