数组大小和常量

时间:2011-01-18 03:48:44

标签: c++ arrays

  

可能重复:
  initialize array size from another array value

在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,那么在两种情况下都可以......

2 个答案:

答案 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

您可以创建一个指向地址的指针,您可以在该地址中声明并为数组赋值,所有这些都在安全的内存空间中。