1

我想在 Visual Studio 中创建一个数组,就像在 C99 中一样:

int function(int N)
{
    int x[N];
    return 1;
};

但即使是 VS2013 也不支持这一点。是否有另一种方法(使用 new 和 delete 除外)x无需在翻译时修复 N 来创建?非常感谢!

4

3 回答 3

2

在 C++ 中这样做的宽恕方法是使用向量

#include <vector>

int function(int N)
{
    std::vector<int> x(N);
    return 1;
};

如果您知道 N 不会很大(并且因为您似乎希望在堆栈上保留此内存,无论如何),您可以使用_allocaC 函数。请参阅此处的文档。

#include <malloc.h>

int function(int N)
{
    int *x = _alloca(sizeof(int)*N);
    return 1;
};

这不是真正推荐的,并且已被 取代_malloca,这需要_freea在您完成内存后调用。

请注意,两个版本都会在函数退出时释放内存,但第一个版本将在堆上分配内存,而第二个版本将在堆栈上分配(因此对 有更严格的上限N)。除了类的便利性和低开销之外,std::vector在 C++ 程序中使用 C 风格的指针还是有点令人沮丧。:)

于 2013-11-05T17:28:01.127 回答
1

为了在堆栈上定义 C++ 中的数组(即没有new),它的大小必须在编译时知道,例如 aconst int或预处理器宏。由于在这种情况下不是这种情况,因此您可以使用以下命令:

#include <vector>
using namespace std;
// ...
int function(int n)
{
    vector<int> x (n);
    return 1;
}
于 2013-11-05T17:27:58.557 回答
0

在 C++ 的堆栈中定义可变长度数组是不可能的。但是您可以使用 std::vector 代替,尽管它在堆中分配内存。

于 2013-11-05T17:21:13.053 回答