可变大小数组和指针之间的区别? [复制]
Posted
技术标签:
【中文标题】可变大小数组和指针之间的区别? [复制]【英文标题】: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;
【问题讨论】:
区别:首先是格式不正确,其次是格式正确(但不推荐)。 您的第一次尝试没有初始化数组元素,当您稍后使用它们的不确定值时会导致未定义的行为。 【参考方案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
【讨论】:
以上是关于可变大小数组和指针之间的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章