Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于变量值C/C+静态定义数组+;_C++_C_Arrays_Memory Management_Definition - Fatal编程技术网

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

C++ 基于变量值C/C+静态定义数组+;,c++,c,arrays,memory-management,definition,C++,C,Arrays,Memory Management,Definition,我想静态地定义一个二维数组。数组的大小由一个变量决定。 我该怎么做?我不想动态定义数组。我听说有一种方法可以做到这一点。我不认为你可以静态地定义它!然而,你可以使用向量,但在它下面也为你做动态分配,我不认为你可以静态地定义它!然而,你们可以使用向量,但在它下面也可以通过“变量”为你们进行动态分配,我假设你们所说的是一个非常量值 在C99中,是: int size = ...; int array[size][size]; 在C++中,你不能。另一种方法是使用指针和动态分配(或者更好的是使用向量

我想静态地定义一个二维数组。数组的大小由一个变量决定。
我该怎么做?我不想动态定义数组。我听说有一种方法可以做到这一点。

我不认为你可以静态地定义它!然而,你可以使用向量,但在它下面也为你做动态分配,我不认为你可以静态地定义它!然而,你们可以使用向量,但在它下面也可以通过“变量”为你们进行动态分配,我假设你们所说的是一个非常量值

在C99中,是:

int size = ...;
int array[size][size];
在C++中,你不能。另一种方法是使用指针和动态分配(或者更好的是使用向量)

在C99之前的C版本中,这也是不可能的。通过“variable”使用
malloc()

,我假设您谈论的是一个非常量值

在C99中,是:

int size = ...;
int array[size][size];
在C++中,你不能。另一种方法是使用指针和动态分配(或者更好的是使用向量)


在C99之前的C版本中,这也是不可能的。使用
malloc(),然后大小必须是可变的,然后必须动态调整大小-或者调整大小的方式使数组的静态大小大于变量可能的最大值。

答案是否您不能在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 
<>一些编译器支持C++ >可变长度数组< /> >强>(VLA)<强> >在C++标准中未定义“强”>VLA <强>,因此使用VLA将不符合C++标准。

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

既然你标记了你的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++中你不能这样做
数组的维度必须在编译时已知

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 
<>一些编译器支持C++ >可变长度数组< /> >强>(VLA)<强> >在C++标准中未定义“强”>VLA <强>,因此使用VLA将不符合C++标准。

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

既然你标记了你的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
下面是一个传奇故事,它解释了有关阵列的一切。

我从中学到了很多

这取决于变量初始化的位置和时间。如果它是在编译时完成的,您可以使用模板来完成它:
template struct ConstExpr{enum{value=/*math在这里*/};},否则如果不自我修改代码是不可能的(我敢肯定这会非常危险,因为您需要更改PE,以便在虚拟化之前以某种方式更改分配的空间)。

这取决于变量初始化的位置和时间。如果它是在编译时完成的,您可以使用模板来完成它:
template struct ConstExpr{enum{value=/*math在这里*/};},否则如果不自我修改代码是不可能的(我敢肯定这会非常危险,因为您需要更改PE,以便在虚拟化之前以某种方式更改分配的空间).

我假设在堆栈内部,这是可变大小的?@Michael:你是说数组是在堆栈上分配的?@Namratha:除非你执行
new
malloc
动态分配内存,否则对象是在堆栈上创建的。另外,
new
malloc
用于在堆上分配动态内存,并将
指针指向它<代码>数组不是指针
&是的,它们是在堆栈上分配的。我假设在内部,这是堆栈上可变大小的?@Michael:你是说数组是在堆栈上分配的吗?@Namratha:除非你执行
新建
malloc
动态分配内存,否则对象是在堆栈上创建的。另外,
new
malloc
用于在堆上分配动态内存,并将
指针指向它<代码>数组不是指针
&是的,它们是在堆栈上分配的。嗯,这些数组声明似乎…;-)@FredOverflow:在答案中添加了链接。为延迟添加表示歉意,我们进行了一次sprint会议:(嗯,这些数组声明似乎…;-)@FredOverflow:在回答中添加了链接。对于延迟添加以下内容表示歉意:举行了一次sprint会议:(