C - 调用函数并给出二维数组

C - Call Function & give 2D Array

我们学校的教授给了我们一个 "simple" C 语言的编程任务。

我们应该创建一个二维数组,用随机数填充它并将其提供给另一个函数。这个函数应该给出二维数组。

问题是:如何交出二维数组?

我在调用函数时也遇到了问题。我包含了 .h 文件,但它总是出错。

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

#define W1 10
#define W2 10
int main(void) {
    int a,b;
    int array[W1][W2];
    for(a = 0; a < W1; ++a)
    {
        for(b=0; b<W2; ++b)
        {
            array[a][b] = rand() %10;
        }
    }
    ShowMatrix(array[][W2], W1, W2);

    return EXIT_SUCCESS;
}

我要调用的函数:

void ShowMatrix(int array[][10], int W1, int W2)
{
    int a,b;
    for(a = 0; a < W1; ++a)
    {
        for(b=0; b<W2; ++b)
        {
            printf("Inhalt von Array[%d][%d] ",a,b);
            printf("ist: %d \n", array[a][b]);
        }
    }
}

Header 函数的一部分:

#ifndef SHOWMATRIX_H_
#define SHOWMATRIX_H_

void ShowMatrix(int array[][], int W1, int W2);

#endif /* SHOWMATRIX_H_ */

包含 int array[][] 的原型是不完整的类型。这不会编译。如果出于某种原因你必须在 header 中有一个不完整的类型(我不知道你为什么想要这个),那么你必须将数组声明为 array[][*]。这将使代码编译,但它仍然是荒谬的。

声明该函数的正确方法应该是这样的:

void ShowMatrix(int W1, int W2, int array[W1][W2]);

然后您可以将函数调用为

ShowMatrix(W1, W2, array);

但这需要您使用标准的 C 编译器。从您的编码风格来看,您似乎被教导使用 30 年前的过时版本的 C,因此这可能不适合您。

你应该问问你的老师,为什么他们从 1989 年而不是 2018 年开始教你编程知识。

问题出在以下几行:

  • ShowMatrix(array[][W2], W1, W2);main 函数中。改成ShowMatrix(array, W1, W2);原因参数不匹配。在函数定义中,您声明 第一个参数是二维数组,但您没有传递二维数组。
  • void ShowMatrix(int array[][10], int W1, int W2) 在函数定义中。将其更改为 void ShowMatrix(int array[][W2], int lenD1, int lenD2)原因 W1W2编译时间常数。它们不能保存传递给函数的值。这些应该是一些变量名。在 int array[][W2] 中,W2 仅用作 良好的编程习惯
  • 您需要相应地更改函数减速,即将 ShowMatrix.h 文件中的 void ShowMatrix(int array[][], int W1, int W2); 更改为 void ShowMatrix(int array[][W2], int lenD1, int lenD2)原因函数减速应该匹配函数定义,反之亦然.

您可以看到完整的工作代码here

以下是更正后的代码。(注释第 #include "ShowMatrix.h" 行是因为托管环境不支持跨多个文件传播的代码):

#include <stdio.h>
#include <stdlib.h>
//#include "ShowMatrix.h"

#define W1 10
#define W2 10

void ShowMatrix(int array[][W2], int lenD1, int lenD2)
{
    int a,b;
    for(a = 0; a < lenD1; ++a)
    {
        for(b=0; b<lenD2; ++b)
        {
            printf("Inhalt von Array[%d][%d] ",a,b);
            printf("ist: %d \n", array[a][b]);
        }
    }
}

int main(void) {
    int a,b;
    int array[W1][W2];
    for(a = 0; a < W1; ++a)
    {
        for(b=0; b<W2; ++b)
        {
            array[a][b] = rand() %10;
        }
    }
    ShowMatrix(array, W1, W2);

    return EXIT_SUCCESS;
}

输出:

Inhalt von Array[0][0] ist: 3 
Inhalt von Array[0][1] ist: 6 
Inhalt von Array[0][2] ist: 7
...