在C ++中
const int a[]={1,2,3,4,5};
int b[a[2]];
int main()
{
return 0;
}
代码在第2行给出错误; 但是,如果它是如下所示,则在编译后不会出现错误:
const int a=3;
int b[a];
int main()
{
return 0;
}
为什么?但是,如果我在main中定义数组b,那么在两种情况下都可以......
答案 0 :(得分:5)
因为在C ++中,数组大小必须是常量表达式,而不仅仅是常量数据。数组数据,即使是const,也不是常量表达式。
第二个版本是一个常量表达式。
答案 1 :(得分:4)
看起来你想制作一个可变大小的数组。要做到这一点,必须使用指针。
<强> POINTERS 强>
通常,你会声明一个这样的数组:
char a[4];
数组必须是常量。它无法改变。我们怎样才能使尺寸变量?像这样。
char* a = new char[length];
这是做什么的?通常,当您声明一个特定大小的数组时,它将在堆栈中声明。但是,这段代码的作用是在堆上分配内存。
char a[4]; // This is created at compile time
char* a = new char[length]; // This is created at run time
您可以创建一个指向地址的指针,您可以在该地址中声明并为数组赋值,所有这些都在安全的内存空间中。