在C++中
可能是重复问题:
从另一个数组值初始化数组大小
const int a[]={1,2,3,4,5};
int b[a[2]];
int main()
{
return 0;
}
代码在第二行出现错误; 但是,如果像下面这样,编译后不会出现错误:
const int a=3;
int b[a];
int main()
{
return 0;
}
为什么会这样呢?然而如果我在main函数中定义数组b,在两种情况下都可以正确运行...
在C++中
可能是重复问题:
从另一个数组值初始化数组大小
const int a[]={1,2,3,4,5};
int b[a[2]];
int main()
{
return 0;
}
const int a=3;
int b[a];
int main()
{
return 0;
}
因为在C++中,数组的大小必须是常量表达式,而不仅仅是常量数据。即使是const的数组数据也不是常量表达式。
第二个版本是常量表达式。
看起来你想创建一个可变大小的数组。为此,必须使用指针。
指针
通常情况下,你会像这样声明一个数组:
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
std::vector
而不是容易出错的手动内存管理。 - underscore_d