如何通过c ++中的函数将数组的大小作为参数发送?

时间:2013-06-05 10:47:09

标签: c++ visual-c++

我使用 Xcode ,但现在我想学习并使用 Visual Studio C ++ ,我的第一个挑战是通过函数及其大小作为参数发送和数组,我该怎么做到这一点?

void Llena2(int R, int C, int (*XY)[C]); //in xcode

void Llena2(int R, int C, int (*XY)[C]); //error C2057: expected constant expression
                              //error C2466: cannot allocate an array of constant size 0

是否可以做一些与xcode类似的事情?提前致谢

3 个答案:

答案 0 :(得分:4)

在这种情况下你应该使用std :: vector。

修改

根据Incompatibilities Between ISO C and ISO C++, 此功能:void test(int R, int C, int (*XY)[R][C])(VLA)仅在C99中有效,但在C ++中无效。

  

C99还为函数参数提供了新的声明语法   VLA类型,允许变量标识符或'*'出现在   数组函数参数声明的括号代替a   常数整数大小表达式。

     

...

     

C ++不支持VLA。

Xcode默认使用C99,因此在Xcode中有效。

答案 1 :(得分:1)

您正在初始化函数中的新数组。 数组(几乎)是一个指针。因此你可以写:

void Llena2(int R, int C, int *XY);

答案 2 :(得分:0)

令人惊讶的是,XCode允许这样做。

C是否恒定?如果是这样,您可以将C参数转换为非类型模板参数:

#include <cstddef>

template <std::size_t C>
void Llena2(int R, int XY[][C]);

编译器会在编译时以这种方式自动推断C,但这仅适用于最外层维度。