来自C ++文档http://www.cplusplus.com/doc/tutorial/arrays/
要定义像这样int a[b];
的数组,变量b必须是常量。
以下是我在g ++下运行的内容(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3
int main(){
int a = 10;
int b[a];
for(int i = 0; i < 10; i++){
cout << b[i] << endl;
}
return 0;
}
变量a不是常数,我没有错误。请问从什么版本的g ++接受这种数组定义开始?
答案 0 :(得分:4)
编译器使用的是非标准扩展。您的代码无效,标准C ++。可变长度数组不是C ++的一个特性。
请注意,大小必须是编译时常量,而不仅仅是常量(即const
)。
答案 1 :(得分:4)
检查该链接: http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Variable-Length.html#Variable-Length
允许可变长度数组作为GCC中的扩展
答案 2 :(得分:1)
您无法在C ++中创建动态数组,因为您的编译器需要在编译之前知道您的程序有多大。 但是你可以使用'new'创建一个数组:
int *b = new int[a];
这将创建一个保留新存储的新阵列。 您可以正常方式访问此数组。
for(int i=0; i<a; i++)
{
b[i];
}
答案 3 :(得分:0)
对于动态大小的数组,您可以在C ++中使用std :: vector(不完全是一个数组,但足够接近,如果您需要原始数组,则可以使用后备存储)。如果您坚持创建动态数据块,只需使用'new type []'即可。
int a = 100;
int[] b = new int[a];