获取函数重新定义的问题

Getting issues for redefinition of functions

我正在尝试将数字扫描到 2 个二维数组中,但一直出现重定义错误。

代码:

#include <stdio.h>
#define N 3

  void getMatrix(double mat[N][N]);
 /*
 char getMenuOption();
 void getCoordinates(int*, int*);
  void sumMatrices(double mat1[][N], double mat2[][N]);
   void changeMatrix(double mat[][N]);
    void printMatrix(double mat[][N]);
*/
int main() {
double A[N][N], B[N][N];
/*
 char option;*/
getMatrix( A[N][N]);
getMatrix( B[N][N]);
/*

option = getMenuOption();*/

return 0;
 }
  void getMatrix(double A[N][N]){
int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&A[N][N]);
    }
    }
    return;

 }
    void getMatrix(double B[N][N]){
     int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&B[N][N]);
    }
    }
return;
  }

我想问题是同一个函数被调用了两次,但我不太确定。 如果有人能帮我指出问题,那将是非常欢迎的。

函数定义了两次

第一个定义

  void getMatrix(double A[N][N]){
int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&A[N][N]);
    }
    }
    return;

 }

第二个定义

    void getMatrix(double B[N][N]){
     int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&B[N][N]);
    }
    }
return;
  }

考虑到函数的这些调用是无效的

getMatrix( A[N][N]);
getMatrix( B[N][N]);

参数的类型为 double,而不是数组或指针。

您应该删除该函数的一个定义并正确声明该函数。

如果编译器允许使用可变长度数组,那么函数应该声明为

void getMatrix(size_t n, double A[n][n]);

如果编译器不支持可变长度数组,那么 N 必须是常量,函数确实可以这样声明

#define N SOME_VALUE
//...
void getMatrix( double A[N][N] );

并像

那样调用函数

第一种情况

getMatrix( N, A );
getMatrix( N, B );

在第二种情况下

getMatrix( A );
getMatrix( B );

您不需要定义一个函数两次(调用它两次或更多次)。一个函数可以被多次调用,这就是首先要有函数的原因。干掉

void getMatrix(double B[N][N]){
     int i;
for(i=0;i<=N;i++){
    for(i=0;i<N;i++)
    {
        scanf("%lf",&B[N][N]);
    }
    }
return;
  }

话虽如此,你应该像这样调用函数

getMatrix(A);
getMatrix(B);

传递数组(衰减到指针,无论如何)。符号 A[N][N] 表示数组的成员,对于定义为

的数组
double A[N][N];

它是差一的,因为 C 中的数组索引从 0 开始。