-3

我通过一个名为 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 更改执行了相同的程序,它执行正确。

还请帮助我了解在这种情况下编译器在数组声明时的行为方式。

4

5 回答 5

5

请告诉我原因

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

还请帮助我了解在这种情况下编译器在数组声明时的行为方式。

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

于 2013-07-27T08:52:27.930 回答
2

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

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

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

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

编辑:你可能想要一个int[]not *int[]

于 2013-07-27T09:01:55.557 回答
1

您不能在 C++ 中创建可变长度数组。尝试使用向量代替

于 2013-07-27T08:53:57.913 回答
1

C++ 中没有 VLA。

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

于 2013-07-27T08:54:20.110 回答
0

int *a[size];通过此语句,您想创建一个大小的数组size,但您尚未初始化变量size。C++ 不支持可变长度数组。您可以这样做:

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

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

vector<int>a;

并将值放入向量中只需推回值

a.push_back(56);

有关矢量的更多信息,请查看此链接

于 2013-07-28T02:40:02.450 回答