C 在函数参数中使用数组变量?

C Use an array variable in a function parameter?

提问人:Ethan Gascoigne 提问时间:6/25/2023 最后编辑:Jonathan LefflerEthan Gascoigne 更新时间:6/26/2023 访问量:66

问:

我有一个 2D 字符串数组。char* d2Array[valueA][valueB]

这工作正常,我可以用字符串填充它并访问它们。将其传递给函数时出现问题。您需要指定第二个 size 参数(即 )。但是,这是一个变量,所以我不能只输入一个数字。void aFunction(char* d2Array[][valueB]

如果此函数位于同一文件中,则将 valueB 设置为全局并按上述方式编写函数。但是,我不确定这是否“正确”?还是只是偶然起作用?这真的安全吗?

另外,我遇到的问题是我需要传递给另一个文件中的函数。我唯一的选择是使这个变量成为我程序中的所有文件吗?我该怎么做呢?或者有更好的方法可以做到这一点吗?d2Array

C 多维数组 variable-length-array 函数参数

评论


答:

4赞 Vlad from Moscow 6/25/2023 #1

如果此函数位于同一文件中,则使 valueB 全局且 如上所述编写函数有效。但是,我不确定这是否是 “正确”?还是只是偶然工作,这真的安全吗 男孩

这意味着您的编译器支持可变长度数组。但是,最好将函数声明为这样的函数

void aFunction( size_t valueA, size_t valueB, char* d2Array[][valueB] );

不使用任何全局变量。

要调用该函数,您需要传递数组和数组本身的二维。

0赞 chux - Reinstate Monica 6/26/2023 #2

莫斯科@Vlad的变化


将数组传递给可变长度数组,并使用可变长度数组作为参数。
这在 C99 和 C23 中可用。可选配C11、C17*1
aFunction()

void aFunction(size_t valueA, size_t valueB, char* d2Array[valueA][valueB]);

请注意,这里仍然是一个指针,即使参数看起来像一个数组。因此,指针的大小,而不是数组的大小。d2Arraysizeof d2Array

char* d2Array[valueA][valueB]可以替换为第一个更好的文档代码的意图,一些分析工具将利用这一点。char* d2Array[][valueB]


*1 整数常量 1,旨在指示实现不支持可变长度数组或可变修改的类型__STDC_NO_VLA__