Fork me on GitHub

动态数组

   动态数组也叫数组的动态联编,有动态联编自然也有静态联编,静态联编就是数组的长度在编译时设置,而动态联编是在运行时才为数组分配空间,其长度在运行时设置,使用完这种动态数组后,应该释放内存。

  静态联编:int arr[10];       //数组长度为一常量

  动态数组在ISO C99后就有了新的规定(如下图文件):

这是部分说明,完整的说明在 ISO/IEC9899 标准的 6.7.5.2 Array declarators里可以看到,这个里面加入了可变长数组的相关规定。

#include <iostream>
int main()
{
    using namespace std;
    int len;
    cin>>len;
    int arr[len];
  return 0;
}

  之前在网上看到好多人说上面这种写法是错误的,但我在gcc下编译并没有报错,这让我产生了疑惑,后来发现原来是知识有了更新,【ps:那可是99年发布的啊!!国内知识更新真慢。。。】

  言归正传,虽然上面的一种申请动态数组的方法很简单,也很实用(因为它会自动释放内存),但这里还是不得不提提用指针的实现。

#include <iostream>
int main()
{
    using namespace std;
    int len;
    cin>>len;
    int *p = new int [len];         //动态申请
    for(int i=0;i<len;i++)           //输入
    {
        cin>>p[i];
    }
    for(int i=0;i<len;i++)           //输出
    {
        cout<<"p["<<i<<"]="<<p[i]<<endl;
    }
    delete [] p;                   //释放内存
  return 0;
}    

  这里只简单提提用指针创建动态数组的方法,如果要谈到数组与指针,恐怕我也说不清楚,至今也只知道二者的一些区别,至于更深层次的理解,还有待学习。

  (更多关于变长数组的知识,请参考这位博友

posted @ 2016-03-13 21:33  Vicebery  阅读(307)  评论(0编辑  收藏  举报