我通过一个名为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更改执行了相同的程序,它已正确执行。
另外,请帮助我理解在数组声明时编译器在这种情况下的行为。
答案 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