数组+ c ++中的常量表达式

时间:2018-04-23 10:47:44

标签: c++ arrays constants

我想从用户那里获得n并将其放在数组表达式上,但在visual studio 2017中获取错误(表达式必须具有常量值),我看到其他编译器完美地使用它。 我以为我可以使用新的或指针,但那些也不起作用。 我知道它有相似的主题(我无法理解它们并将它们与我的问题相匹配)但如果有人为我编写正确的代码会很棒。 感谢。

  int n;
    cout <<"Enter n:" ;
    cin >> n;
    int a[n];    //recive error for n (expression must have a constant value)

    for(int i=0;i<n;i++)
         a[i]=rand() % 100;

    for(int i=0;i<n;i++)        
        cout<<setw(5)<< a[i];

2 个答案:

答案 0 :(得分:2)

在C ++中,数组必须具有固定大小。您不能拥有一个大小取决于运行时值的普通数组。这就是编译器抱怨nint a[n];不是常数的原因。

您应该使用std::vectorstd::vector<int> a(n);将创建一个可以容纳n个元素的向量。其余代码可以保持不变。

答案 1 :(得分:0)

“我以为我可以使用新的或指针,但那些也不起作用。” ......你真的这样做了吗?

第一个解决方案是建议您使用矢量的一些答案。

但是如果你想使用指针和new(这是唯一的方法,因为数组声明在声明时需要一个常量大小),你可以使用以下内容:

int n;
cout <<"Enter n:" ;
cin >> n;
int *a;    //recive error for n (expression must have a constant value)
a = new int [n];  // <--- this will allocate the memory to create an array of size n.

for(int i=0;i<n;i++)
     a[i]=rand() % 100;

for(int i=0;i<n;i++)        
    cout<<setw(5)<< a[i];

请记住在新的后使用删除。 (删除[] a);