Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在函数中写入多维数组?面向初学者的C语言编程_C_Arrays_Function - Fatal编程技术网

如何在函数中写入多维数组?面向初学者的C语言编程

如何在函数中写入多维数组?面向初学者的C语言编程,c,arrays,function,C,Arrays,Function,我是一年级学生,我做C语言编程。请不要对我这么刻薄 您能演示如何在函数中使用和编写多维数组吗 我研究了数组和函数arg输入 我已经读到,第一个维度对编译器没有那么重要。它检查数组中的第二个和更多维度,因此您必须在函数中指定它才能使其工作 我尝试了不同的阵列组合,但没有找到解决方案 下面是我的一段代码: int size=5,location_x=10,location_y=10,s=NULL,l_x, l_y, status=2; int stage_3(float[][int],int []

我是一年级学生,我做C语言编程。请不要对我这么刻薄

您能演示如何在函数中使用和编写多维数组吗

我研究了数组和函数arg输入

我已经读到,第一个维度对编译器没有那么重要。它检查数组中的第二个和更多维度,因此您必须在函数中指定它才能使其工作

我尝试了不同的阵列组合,但没有找到解决方案

下面是我的一段代码:

int size=5,location_x=10,location_y=10,s=NULL,l_x, l_y, status=2;

int stage_3(float[][int],int [],int [],int []);

int main()
{
float location[l_x][l_y];
int x[size], y[size], z[size];

if(!stage_3(location[l_x][l_y],x[size],y[size],z[size]))
    return 0;
}

int stage_3(float location[][int l_y],int x[size],int y[size],int wt[size])
{
  return 0;
}
13 |错误:“int”之前应为表达式

13 |错误:应为“;”,“,”或在“int”之前加“)”

我知道问题出在那些人身上。它们不是常数。
该程序将它们作为变量,您可以根据需要在可访问范围内选择,以获得更大的灵活性。

此原型无法工作:

int stage_3(float[][int],int [],int [],int []);
您需要给出第一个数组的第二个维度的实际大小。如果该大小不是编译时常量,那么最好的选择可能是使用可变长度数组。下面是一个很好的方法:

int stage_3(int l_y, float location[][l_y],int x[],int y[],int z[]);
当然,必须修改函数定义以匹配,如果您使用一个附加参数来表示变量维度,如上所述,那么您还必须在函数调用中包含该附加参数


VLA在C99中是新的;一些编译器仍然需要指示使用C99模式来编译使用它们的代码。

在c语言中只有很少的选项,您可以使用
malloc()
动态分配数组,或者您可以执行类似
int stage\u 3的操作(size\t size,size\t l\y,float location[][l\y],int x[size],int y[size],int wt[size])
@iharob所以你想说如果我使用malloc(location[l_x][l_y]),它将初始化内存块,你只需在任何函数中的任何地方使用它?不,这是错误的,因为你是初学者,你必须避免使用
malloc()
很难理解指针是如何工作的,也很难理解
malloc()
你必须承担新的责任,去
free()
malloc()ed块。很抱歉我这么笨。但我不明白这些内存块是如何工作的。我使用大小为1的字符串,还有指针。我需要使用指针吗?天哪,我看起来有那么傻……不,你只是一个随机的Noob,成为一个也没关系,在你真正理解所有其他概念之前,不要担心,避免使用指针。额外的参数(
l_y
)已经作为一个全局参数包含(未初始化),换句话说:你不需要包含
int l_y
,只需初始化它或在运行时分配一些值。是的,您可以依赖数组维度的全局变量,而不是将维度作为函数参数包含在内。这样做将允许函数签名更类似于OP开始时的签名。但是,就风格和良好实践而言,我不推荐这种方法。我同意,最好是将维度传递给函数,但是
必须在函数调用中包含额外的参数
是不正确的,因为
l_y
已经定义为全局:
int size=5,location_x=10,location_y=10,s=NULL,l_x,l_y,状态=2