我有一个2D字符串数组char* d2Array[valueA][valueB]
。
这工作正常,我能够用字符串填充它并访问它们。在将其传递给函数时存在问题。您需要指定第二个大小参数(即void aFunction(char* d2Array[][valueB]
)。但是,这是一个变量,所以我不能只输入一个数字。
如果这个函数在同一个文件中,那么让valueB全局化,并像上面那样编写函数。但我不确定这是否“正确”。还是说,这只是偶然的机会?这样做安全吗?
另外,我遇到的问题是我需要将d2Array
传递给另一个文件中的函数。我唯一的选择是让这个变量在我的程序中的所有文件?我该怎么做?或者有更好的方法吗?
2条答案
按热度按时间yfwxisqw1#
如果这个函数在同一个文件中,那么让valueB全局化,并像上面那样编写函数。但我不确定这是否“正确”。或者只是偶然的,这样做真的安全吗?
这意味着你的编译器支持可变长度数组。但是,最好将函数声明为
void aFunction( size_t valueA, size_t valueB, char* d2Array[][valueB] );
而不使用任何全局变量。
要调用该函数,您需要传递数组的两个维度和数组本身。
6kkfgxo02#
来自莫斯科的@Vlad的变体
将数组传递给
aFunction()
,并使用 variable length array 作为参数。这在C99和C23中可用。可选C11、C17*1。
请注意,这里的
d2Array
仍然是一个指针,尽管参数看起来像一个数组。因此sizeof d2Array
是指针的大小,而不是数组的大小。char* d2Array[valueA][valueB]
可以用char* d2Array[][valueB]
代替,但第一个更好的文档代码的意图和一些分析工具将利用这一点。__STDC_NO_VLA__
整数常量1,用于指示实现不支持可变长度数组或可变修改类型