【发布时间】:2019-12-30 13:57:03
【问题描述】:
我是 C 编程新手,在创建 2D 数组打印函数时遇到了问题。当我尝试执行下面的代码时,我得到:
points.c:13: error: unknown array element size
正如我所检查的那样,网上有非常相似的代码,它们应该可以工作。我试图将函数初始化为
int print2DArray( int arrayLen, int elementLen, int array[arrayLen][elementLen])
但它引发了:
points.c:3: error: 'arrayLen' undeclared
谁能告诉我这段代码有什么问题以及如何修复它?我也不明白为什么一维数组非常相似的函数工作得很好。它必须是纯 C 语言。
#include <stdio.h>
//supposed to print 2D array:
int print2DArray(int array[][], int arrayLen, int elementLen)
{
int i;
int j;
for (i = 0; i < arrayLen; i++)
{
for (j=0; j < elementLen; j++)
{
printf("%5d", array[i][j]);
}
printf("\n");
}
}
//prints 1D array:
int printArray( int array[], int arrayLen)
{
int i;
for (i = 0; i < arrayLen; i++)
{
printf("%d", array[i]);
}
}
--- 编辑---
我不明白你们中的大多数人指出该函数必须这样调用:
#include <stdio.h>
int print2DArray( int arrayLen, int elementLen, int array[arrayLen][elementLen])
{
int i;
int j;
for (i = 0; i < arrayLen; i++)
{
for (j=0; j < elementLen; j++)
{
printf("%5d", array[i][j]);
}
printf("\n");
}
}
这会引发错误:
points.c:3: error: 'arrayLen' undeclared
我在 windows 上使用 tcc,根据文档,它应该支持 C99 VLA。
【问题讨论】:
-
你说你把函数写成
int print2DArray( int arrayLen, int elementLen, int array[arrayLen][elementLen])。但你没有。相反,您已经完成了int print2DArray(int array[][], int arrayLen, int elementLen),这是完全不同的(并且无效)。 -
int array[][]不是一个有效的参数,所以忘记这一点。在此之前,您已经确定您的编译器 是否 支持 VLA(可变长度数组)?必须这样做,否则您的int print2DArray( int arrayLen, int elementLen, int array[arrayLen][elementLen])将无法正常工作。 -
发布导致“我已尝试将函数初始化为
int print2DArray( int arrayLen, int elementLen, int array[arrayLen][elementLen])”的代码。我怀疑您有转录错误。 -
@Peter 我知道,我的意思是我已经尝试了这两种方法。
-
ChrisM "我在 windows 上使用 tcc,根据文档,它应该支持 C99 VLA" --> 编译器似乎处于根本不接受 VLA 的模式。也许编译器选项是为 C89 之前设置的,没有 VLA 或“支持 C99”只是“支持大部分 C99”。
标签: c arrays multidimensional-array