我们的学校教授在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_ */
答案 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)
。 原因 W1
和W2
是编译时常量。他们无法保持传递给函数的价值。这些应该是一些变量名称。在int array[][W2]
中,W2
仅用作良好的编程习惯 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
...