Ala*_*yed 2 c function multidimensional-array
我写了一个函数来检查矩阵是否是对称的.如果是,则返回1,否则返回0.它总是返回零.我试图找出错误的位置,但对我来说一切似乎都是正确的.
我的代码是:
#include <stdio.h>
#include <stdlib.h>
#define max 100
int Symmetrie (int matrix[][max]) {
  int i,j;
  for(i=0;i<4;i++) {
    for(j=0;j<4;j++) {
      if(matrix[i][j] != matrix[j][i]) {
        return 0;
      }
    }
  }
  return 1;
}
int main() {
  int x;
  int  square_matrix[][max]={{1,2,3,4}
    ,{2,2,5,6}
    ,{3,5,3,7}
    ,{4,6,7,4}
  };
  x= Symmetrie(square_matrix[4][4]);
  if(x==1) {
    printf("1");
  } else {
    printf("0");
  }
  return 0;
}
该函数应返回1,但它返回零.我错过了什么?
改变这个:
x= Symmetrie(square_matrix[4][4]);
对此:
x = Symmetrie(square_matrix);
因为你的方法需要整个矩阵作为参数,而不仅仅是一个元素.
square_matrix[4][4]是矩阵的单个元素,即第5行和第5列中的元素.当然,这会调用Undefined Behavior(UB),因为矩阵有4行.
更重要的是,不要忽略生成的警告.例如,在GCC中你会得到这样的东西:
prog.c: In function 'main':
prog.c:24:32: warning: passing argument 1 of 'Symmetrie' makes pointer from integer without a cast [-Wint-conversion]
   24 |   x= Symmetrie(square_matrix[4][4]);
      |                ~~~~~~~~~~~~~~~~^~~
      |                                |
      |                                int
prog.c:5:20: note: expected 'int (*)[100]' but argument is of type 'int'
    5 | int Symmetrie (int matrix[][max]) {
      |                ~~~~^~~~~~~~~~~~~
正如你在中看到的那样Live Demo.