【问题标题】:Difference between variable sized array and pointer? [duplicate]可变大小数组和指针之间的区别? [复制]
【发布时间】:2019-10-05 06:57:03
【问题描述】:

以下两种说法有什么区别?

i) long long int ar[n+1];

ii) long long int *ar=new long long int[n+1]();

对于hackerrank中的数组操作问题,我的代码在使用第一个语句时失败了一些测试用例,但在第二个语句中得到了正确的答案。

int main()
{
    long long int n,m,a,b,k,i,x=0,maxi=INT_MIN;
    cin>>n>>m;
    //long long int ar[n+1];
    long long int *ar=new long long int[n+1]();
    while(m--) {
        cin>>a>>b>>k;
        ar[a]+=k;
        if((b+1)<=(n))
        ar[b+1]-=k;
    }
    for(i=1;i<=n;i++) {
       x=x+ar[i];
       if(maxi<x) 
       maxi=x;
    }
    cout<<maxi;
    return 0;
}

【问题讨论】:

  • 区别:首先是格式不正确,其次是格式正确(但不推荐)。
  • 您的第一次尝试没有初始化数组元素,当您稍后使用它们的不确定值时会导致未定义的行为。

标签: c++ arrays dynamic


【解决方案1】:

i) long long int ar[n+1];

这仅在编译时知道n 时有效,而您的情况并非如此。它可能会因为某些编译器的扩展而编译。

如果n 在编译时已知并且您有一个有效的代码ar 将被分配到自动内存中。

ii) long long int *ar=new long long int[n+1];

ar 这里将被分配在动态内存中,n 几乎没有限制,你必须自己照顾它的生命。

每个new 都应该带有一个delete

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 2011-07-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2019-10-06
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多