C - 呼叫功能&给2D数组

时间:2018-04-25 07:51:37

标签: c arrays function multidimensional-array call

我们的学校教授在C中为我们提供了一个“简单”的程序任务。

我们应该创建一个2D数组,用随机数填充它并将其赋予另一个函数。该功能应该给出2D阵列。

问题是:我如何移交2D阵列?

通过调用该函数我也遇到了问题。我包含.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]);
        }
    }
}

func的标题部分:

#ifndef SHOWMATRIX_H_
#define SHOWMATRIX_H_

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

#endif /* SHOWMATRIX_H_ */

2 个答案:

答案 0 :(得分:1)

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

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

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

然后您可以将该功能调用为

ShowMatrix(W1, W2, array);

但这要求您使用标准C编译器。根据您的编码风格来判断,您似乎已经被教导使用30岁且过时的C版本,因此这可能不适合您。

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

答案 1 :(得分:-1)

问题在于以下几行:

    ShowMatrix(array[][W2], W1, W2);函数中
  • main。将其更改为ShowMatrix(array, W1, W2); 原因 参数不匹配。在函数定义中,您声明第一个参数是2D数组,但您没有传递2D数组。
  • 功能定义中的
  • 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
...