这是为对象创建大小(1,len)的向量的代码:
#include<iostream.h>
class vector
{
int *vect;
int len;
public:
vector(){ vect=NULL; len=0; }
void get_data();
void display();
};
void vector::get_data()
{
cout<<"Enter number of elements: ";
cin>>len;
int *f=new int(len);
vect=f;
cout<<"Enter "<<len<<" values: ";
for(int i=0;i<len;i++) cin>>*(vect+i);
}
void vector::display()
{
for(int i=0;i<len;i++) cout<<*(vect+i)<<" ";
cout<<endl;
}
void main()
{
vector v1,v2;
v1.get_data();
v1.display();
v2.get_data();
v2.display();
v1.display();
}
输出:
Enter number of elements: 5
Enter 5 values: 1 2 3 4 5
1 2 3 4 5
Enter number of elements: 5
Enter 5 values: 6 7 8 9 9
6 7 8 9 9
9 2 3 4 5
为什么矢量对象v1的第一个值在创建对象v2时会发生变化?
当我更换线路时:
get_data()中的int *f=new int(len);
到int *f=new int[len];
我得到了预期的结果:
Enter number of elements: 5
Enter 5 values: 1 2 3 4 5
1 2 3 4 5
Enter number of elements: 5
Enter 5 values: 6 7 8 9 9
6 7 8 9 9
1 2 3 4 5
答案 0 :(得分:11)
new int(len)
创建一个整数,并使用值len
对其进行初始化。
new int[len]
创建一个未初始化的len
整数数组。
答案 1 :(得分:9)
new int(len)
分配一个int
对象,并使用值len
对其进行初始化。另一方面,new int[len]
分配长度为int
的{{1}}数组。
与len
和int x(5);
进行比较。
当您只分配一个int x[5];
时,int
试图写入尚未分配的对象。