提问人:Ethan Gascoigne 提问时间:6/25/2023 最后编辑:Jonathan LefflerEthan Gascoigne 更新时间:6/26/2023 访问量:66
C 在函数参数中使用数组变量?
C Use an array variable in a function parameter?
问:
我有一个 2D 字符串数组。char* d2Array[valueA][valueB]
这工作正常,我可以用字符串填充它并访问它们。将其传递给函数时出现问题。您需要指定第二个 size 参数(即 )。但是,这是一个变量,所以我不能只输入一个数字。void aFunction(char* d2Array[][valueB]
如果此函数位于同一文件中,则将 valueB 设置为全局并按上述方式编写函数。但是,我不确定这是否“正确”?还是只是偶然起作用?这真的安全吗?
另外,我遇到的问题是我需要传递给另一个文件中的函数。我唯一的选择是使这个变量成为我程序中的所有文件吗?我该怎么做呢?或者有更好的方法可以做到这一点吗?d2Array
答:
如果此函数位于同一文件中,则使 valueB 全局且 如上所述编写函数有效。但是,我不确定这是否是 “正确”?还是只是偶然工作,这真的安全吗 男孩
这意味着您的编译器支持可变长度数组。但是,最好将函数声明为这样的函数
void aFunction( size_t valueA, size_t valueB, char* d2Array[][valueB] );
不使用任何全局变量。
要调用该函数,您需要传递数组和数组本身的二维。
莫斯科@Vlad的变化
将数组传递给可变长度数组,并使用可变长度数组作为参数。
这在 C99 和 C23 中可用。可选配C11、C17*1。aFunction()
void aFunction(size_t valueA, size_t valueB, char* d2Array[valueA][valueB]);
请注意,这里仍然是一个指针,即使参数看起来像一个数组。因此,指针的大小,而不是数组的大小。d2Array
sizeof d2Array
char* d2Array[valueA][valueB]
可以替换为第一个更好的文档代码的意图,一些分析工具将利用这一点。char* d2Array[][valueB]
*1 整数常量 1,旨在指示实现不支持可变长度数组或可变修改的类型__STDC_NO_VLA__
评论