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)
。 原因 W1
和W2
是编译时间常数。它们不能保存传递给函数的值。这些应该是一些变量名。在 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
...
我们学校的教授给了我们一个 "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)
。 原因W1
和W2
是编译时间常数。它们不能保存传递给函数的值。这些应该是一些变量名。在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
...