C错误:“;下标值既不是数组也不是指针;成排梯队 #包括

C错误:“;下标值既不是数组也不是指针;成排梯队 #包括,c,matrix,row,operation,C,Matrix,Row,Operation,//印刷矩阵 #include <stdio.h> void打印矩阵(浮点a[]{ int i,j; printf(“\n输出矩阵:\n”); for(i=0;i无效打印矩阵(浮点a[])的参数不正确 将功能原型替换为: void printmatrix(float a[][])您已声明printmatrix将一维数组作为参数,但试图将该参数作为二维数组进行索引。这不起作用 一些选择: 由于您假设始终使用3x4矩阵,因此只需在函数参数列表中声明: for(i=2; i<3;

//印刷矩阵

#include <stdio.h>
void打印矩阵(浮点a[]{
int i,j;
printf(“\n输出矩阵:\n”);

for(i=0;i无效打印矩阵(浮点a[])
的参数不正确

将功能原型替换为:


void printmatrix(float a[][])

您已声明
printmatrix
将一维数组作为参数,但试图将该参数作为二维数组进行索引。这不起作用

一些选择:

由于您假设始终使用3x4矩阵,因此只需在函数参数列表中声明:

for(i=2; i<3; i++){
    value = a[i][1];
    for(j=0; j<4; j++){
        a[i][j] = a[i][j] - value * a[1][j];
    }
    printf("\n");
}

printmatrix(a);

}
但是,请注意,在函数参数声明的上下文中,任何形式为
ta[]
ta[N]
的声明都将被视为
T*a
;因此,上述声明将被解释为

void printmatrix( float a[3][4] )
{
  ...
}
编辑-把
a
的类型弄错了;这就是我在没有测试的情况下发布的结果

通常,不应在
printmatrix
函数中硬编码数组维度;如果要显示两个维度不同的矩阵,该怎么办?更好的方法是将数组维度作为单独的参数传递

如果您使用的是支持可变长度数组的C99编译器或C2011编译器,这很容易:

void printmatrix( float (*a)[4] )
{
  ...
}
如果您不使用支持可变长度数组的C99编译器或C2011编译器,则必须做一些简单的操作。您可以显式传递第一个元素的地址,然后手动计算2D偏移量,如下所示:

printmatrix( 3, 4, matrix );

这也不正确;必须指定内部尺寸。
for(i=1, count =0; i<3; i++){
    if(a[i][0] == 1 && i != 1){
        for(j=0; j<4; j++){ // swapping two rows
            temp = a[i][j];
            a[i][j] = a[0][j];
            a[0][j] = temp;
        }
        break;
    }
    count++;
    // If there is no 1 in any row then divide 2nd row by a[1][1]
    if(count == 2){
        k = 1;
        value = a[1][1];
        for(j=0; j<4; j++){
            a[k][j] = a[k][j]/value;
        }
    }
}
for(i=2; i<3; i++){
    value = a[i][1];
    for(j=0; j<4; j++){
        a[i][j] = a[i][j] - value * a[1][j];
    }
    printf("\n");
}

printmatrix(a);

}
void printmatrix( float a[3][4] )
{
  ...
}
void printmatrix( float (*a)[4] )
{
  ...
}
void printmatrix( size_t rows, size_t cols, float (*a[rows]) )
{
  size_t i, j;

  printf("\nOutput matrix: \n");
  for(i=0; i<rows; i++){
    for(j=0; j<cols; j++){
      printf("%f ", a[i][j]);
  }
  printf("\n");
}   
printmatrix( 3, 4, matrix );
void printmatrix( size_t rows, size_t cols, float *a )
{
  size_t i, j;
  for ( i = 0; i < rows; i++ )
  {
    for ( j = 0; j < cols; j++ )
      printf("    %f", a[i * rows + j] );
    putchar( '\n' );
  }
}
printmatrix( 3, 4, &matrix[0][0] );