基于变量值C / C ++静态定义数组

时间:2011-05-03 03:53:06

标签: c++ c arrays memory-management definition

我想静态定义一个2D数组。数组的大小由变量确定。 我该怎么做呢?我不想动态定义数组。我听说有办法做到这一点。

5 个答案:

答案 0 :(得分:3)

答案是 否则你不能用C ++ 必须在编译时知道数组的大小。

int my_array[6][7];   // okay  
int my_array[H][7];   // ISO C++ forbids variable length array 
int my_array[6][W];   // ISO C++ forbids variable length array 
int my_array[H][W];   // ISO C++ forbids variable length array 

某些编译器通过自己的扩展支持Variable Length Arrays (VLA),但 VLA 未在C ++标准中定义,因此使用VLA将不符合要求到C ++标准。

VLA是在C99 C标准中引入的。 C ++从C98的C标准中分支出来。当C引入VLA时,C ++已经有了Vectors并且不需要支持或鼓励VLA。因此,VLA从未在C ++标准中被正式接受,一些C ++编译器仍然通过编译器扩展支持VLA。

因为您标记了Q C和C ++,所以总结答案:

In C99 & versions after that : You Can  
Versions before C99: You Can't
In C++(Any version): You can(through compiler extensions) but You should'nt

这是传说中的C++ FAQ,它解释了有关数组的所有内容 我从中学到了很多东西。 :)

答案 1 :(得分:1)

我不这么认为你可以静态定义它!但是你可以使用矢量,但它下面也可以为你动态分配

答案 2 :(得分:1)

如果数组的某个维度是可变的,那么大小必须是可变的,那么它必须是动态大小的 - 或者以这样的方式调整大小,使得数组的静态大小大于变量可以的最大值是

答案 3 :(得分:0)

通过“变量”,我假设你在谈论一个非常数值。

在C99中,是的:

int size = ...;
int array[size][size];

在C ++中,你不能。另一种方法是使用指针和动态分配(或者更好的是矢量)。

在C99之前的C版本中,它也是不可能的。使用malloc()

答案 4 :(得分:0)

这取决于变量初始化的位置和时间。如果它在编译时完成,你可以使用模板来完成它:template </* args */> struct ConstExpr{enum{value = /* math goes here */};};,否则没有自修改代码是不可能的(我很确定这会非常危险,因为你需要改变PE所以你可以在虚拟化之前以某种方式获得你分配的空间变化。