打印出动态数组或矩阵的元素

时间:2011-07-27 08:30:42

标签: c++

为什么这个用于打印数组的简单代码不起作用?

void main()
{

    cout<<"Simple for\n";
    int n;
    cout<<"Enter the lenght of array:";
    cin>>n;
    int* a= new int[n];
    for(int j=0; j<n; j++){
        a[j]=0;
        cout<<setw(8)<<a[j];
        //getchar();

    }
    getchar();  
    delete[]a;


}

输出很快消失。

当n是常数时,它可以工作但是当n来自输入时它不起作用。 当getchar放入For时,它只打印出任意长度的数组的两个元素。

有什么问题?

3 个答案:

答案 0 :(得分:2)

你可能想要这个:

int* a= new int[n];

C ++不是C;你没有用new分配“字节”;你分配对象。数组,类型等因此,如果您想要一个类型为n的{​​{1}}数组,那么您可以分配它。不需要int,乘法等。

请注意,必须使用数组版本的delete删除使用数组版本sizeof分配的任何内容(即:new):

new Type[]

尺寸不必要;您只需确保delete []a; new[]

配对

答案 1 :(得分:2)

此分配

int* a= new int(n*sizeof(int)); 

仅分配一个int并将其初始值设置为n*sizeof(int)。不完全是你想要的。

分配n个int的正确方法是

int* a = new int[n];

甚至更好

std::vector<int>   a(n);

答案 2 :(得分:0)

谢谢大家 问题已经解决了.. 但我不知道为什么。 任何人都可以在这里解释另一个getchar()的角色吗?


这是新代码:

int main()
{
cout<<"Simple for\n";
int n;
cout<<"Enter the lenght of array:";
cin>>n;
int* a= new int[n];
for(int j=0; j<n; j++){
        a[j]=0;
        cout<<setw(8)<<a[j];
                  }
    delete[]a;
    getchar();  
    getchar();
}