数组大小在c和c ++中动态声明

时间:2013-07-27 08:51:01

标签: c++ c

我通过一个名为size的变量动态传递数组大小,它在c中运行良好,但在c ++中运行不正常。请告诉我原因,提前致谢。

    #include <iostream>
    #include <stdlib.h>
    using namespace std;

    int size;
    int main(int argc, char *argv[])
    {
      int i ;

      int *a[size];
      cout<<"Enter size";
      cin >> size;


     for(i =0; i < size ;i++)
      {
        cout<<"Enter value:" ;
        cin>>a[i] ;
      }

    for(i=0 ; i < size; i++)
    {
       cout<<a[i]<< " ";
     }
     system("PAUSE");   
     return 0;
   } 

我已经通过正确的I / O更改执行了相同的程序,它已正确执行。

另外,请帮助我理解在数组声明时编译器在这种情况下的行为。

5 个答案:

答案 0 :(得分:5)

  

请告诉我原因

原因是C ++没有可变长度数组。也许您正在寻找std::vector<int>(可能)或new int(不太可能)。

  

另外,请帮助我理解在数组声明时编译器在这种情况下的行为。

就像它在任何其他情况下的行为一样:它解析源文本并输出语义对应于源代码的机器代码。只是可变长度数组的大小不是硬编码为常量,而是存储在寄存器或堆栈中(如某种“变量”)和大小计算(特别是指针算法) )再次执行储值。

答案 1 :(得分:2)

您的代码尝试从未初始化的变量size中分配一定量的内存。它的值仅在稍后分配:

int a[size];
/* ... */
cin >> size;

如果您切换这些语句的顺序,如果您的C ++编译器具有可变长度数组的扩展名,它可能会执行您想要的操作。一种更便携且通常更可取的解决方案是:

cin >> size;
std::vector<int> a(size);

编辑:您可能想要int[]而不是*int[]

答案 2 :(得分:1)

您无法在c ++中创建可变长度数组。尝试使用矢量

答案 3 :(得分:1)

C ++中没有VLA。

如果要编写要在C ++项目中使用的代码,那么用C ++编写代码(使用std::vector而不是VLA)或者用C编写代码,用C编译器编译并使用你的链接器从你的C ++项目链接到它。

答案 4 :(得分:0)

int *a[size];这个语句要创建一个大小为size的数组,但是你还没有初始化变量size。C ++不支持变长数组。你可以做它是这样的:

int size;
cin>>size;
int *a[size];

或者只使用动态分配内存的STL vector

vector<int>a;

并将值放入向量中只需按下值

a.push_back(56);

有关矢量的详细信息,请查看此link