输出动态数组或矩阵的元素

Printing out elements of dynamic array or matrix

本文关键字:元素 动态 数组 输出      更新时间:2023-10-16

为什么这个简单的代码打印出一个数组不工作?

void main()
{
    cout<<"Simple forn";
    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时,它只输出任意长度的数组中的两个元素。

怎么了?

你可能想要这样:

int* a= new int[n];

c++不是C;你不分配"字节"与new;你分配对象。数组、类型等。所以如果你想要一个int类型的n值数组,那么你就分配它。不需要sizeof、乘法等

注意,任何你用数组版本的new(即:new Type[])分配的东西都必须用数组版本的delete:

删除
delete []a;

大小是不必要的;你只需要确保new[]delete[]是配对的

此分配

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

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

分配n个int的正确方法是

int* a = new int[n];

或者更好的

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

谢谢大家问题解决了……但我不知道为什么。有人能解释一下这里另一个getchar()的作用吗?


这是新的代码:

int main()
{
cout<<"Simple forn";
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();
}