我想在 Visual Studio 中创建一个数组,就像在 C99 中一样:
int function(int N)
{
int x[N];
return 1;
};
但即使是 VS2013 也不支持这一点。是否有另一种方法(使用 new 和 delete 除外)x
无需在翻译时修复 N 来创建?非常感谢!
在 C++ 中这样做的宽恕方法是使用向量
#include <vector>
int function(int N)
{
std::vector<int> x(N);
return 1;
};
如果您知道 N 不会很大(并且因为您似乎希望在堆栈上保留此内存,无论如何),您可以使用_alloca
C 函数。请参阅此处的文档。
#include <malloc.h>
int function(int N)
{
int *x = _alloca(sizeof(int)*N);
return 1;
};
这不是真正推荐的,并且已被 取代_malloca
,这需要_freea
在您完成内存后调用。
请注意,两个版本都会在函数退出时释放内存,但第一个版本将在堆上分配内存,而第二个版本将在堆栈上分配(因此对 有更严格的上限N
)。除了类的便利性和低开销之外,std::vector
在 C++ 程序中使用 C 风格的指针还是有点令人沮丧。:)
为了在堆栈上定义 C++ 中的数组(即没有new
),它的大小必须在编译时知道,例如 aconst int
或预处理器宏。由于在这种情况下不是这种情况,因此您可以使用以下命令:
#include <vector>
using namespace std;
// ...
int function(int n)
{
vector<int> x (n);
return 1;
}
在 C++ 的堆栈中定义可变长度数组是不可能的。但是您可以使用 std::vector 代替,尽管它在堆中分配内存。