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

yacmzcpb  于 2023-06-28  发布在  其他
关注(0)|答案(2)|浏览(127)

我有一个2D字符串数组char* d2Array[valueA][valueB]
这工作正常,我能够用字符串填充它并访问它们。在将其传递给函数时存在问题。您需要指定第二个大小参数(即void aFunction(char* d2Array[][valueB])。但是,这是一个变量,所以我不能只输入一个数字。
如果这个函数在同一个文件中,那么让valueB全局化,并像上面那样编写函数。但我不确定这是否“正确”。还是说,这只是偶然的机会?这样做安全吗?
另外,我遇到的问题是我需要将d2Array传递给另一个文件中的函数。我唯一的选择是让这个变量在我的程序中的所有文件?我该怎么做?或者有更好的方法吗?

yfwxisqw

yfwxisqw1#

如果这个函数在同一个文件中,那么让valueB全局化,并像上面那样编写函数。但我不确定这是否“正确”。或者只是偶然的,这样做真的安全吗?
这意味着你的编译器支持可变长度数组。但是,最好将函数声明为
void aFunction( size_t valueA, size_t valueB, char* d2Array[][valueB] );
而不使用任何全局变量。
要调用该函数,您需要传递数组的两个维度和数组本身。

6kkfgxo0

6kkfgxo02#

来自莫斯科的@Vlad的变体
将数组传递给aFunction(),并使用 variable length array 作为参数。
这在C99和C23中可用。可选C11、C17*1。

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

请注意,这里的d2Array仍然是一个指针,尽管参数看起来像一个数组。因此sizeof d2Array是指针的大小,而不是数组的大小。
char* d2Array[valueA][valueB]可以用char* d2Array[][valueB]代替,但第一个更好的文档代码的意图和一些分析工具将利用这一点。

  • 1 __STDC_NO_VLA__整数常量1,用于指示实现不支持可变长度数组或可变修改类型

相关问题