如何在函数中写入多维数组?面向初学者的C语言编程
我是一年级学生,我做C语言编程。请不要对我这么刻薄 您能演示如何在函数中使用和编写多维数组吗 我研究了数组和函数arg输入 我已经读到,第一个维度对编译器没有那么重要。它检查数组中的第二个和更多维度,因此您必须在函数中指定它才能使其工作 我尝试了不同的阵列组合,但没有找到解决方案 下面是我的一段代码:如何在函数中写入多维数组?面向初学者的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 []
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“哦,我明白你的意思了,”奥特曼说。好的,我已经更新了我的答案,以避免暗示将变量维度的大小作为函数参数传递是在这个作业中使用VLA的唯一方法。不过,由于OP缺乏经验,我将为他提供一篇关于所有其他备选方案的详细论文,并坚持只推荐一个。