刘加加在成长(C++语言学习中)

学习、工作、生活,这是三个问题。

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  38 随笔 :: 0 文章 :: 24 评论 :: 0 Trackbacks
      动态数组,顾名思义,就是可以动态分配长度的数组。在c语言中,数组的长度是固定的,而这种限制显然是很不灵活的。在c++中,数组有时候不用在编译时就知道长度,直到运行时才知道。与普通的数组变量不同,动态分配的数组将一直存在,直到程序显式的释放它为止。

定义:

      int *p=new int[20];

      p就是一个动态数组,这时我们发现,其实所谓的动态数组就是一个指针,使用new为p分配长度。我们可以通过这种方式初始化: int *p=new int[20]();

      同样上面的语句等同于:
      int n=20; 
      int *p=new int[n];
      因为n是一个变量,所以数组的长度是动态的。

操作实例:

      int n=20; 
      int *p=new int[n];

      p可以使用数组下标为其赋值:
      for(int i=0;i<n;i++)
      {
            p[i]=i+3;
      }
     上面这种方式没有问题,但我想既然p是一个指针,那么使用指针操作一样也可以吧?

     for(int i=0;i<n;i++,p++)
    {
           *p=i;
     }
 
      这样就可以了,将他们输出:(这时指针p又指向了最后)
      
      p--;
      for(int *p2=p-10;p2!=p;p--)
      {
           cout<<*p<<endl;
      }

动态空间释放:

      最后重要的是别忘了将动态创造的空间释放掉,语句是:delete [] p;   ‘[ ]’表明该指针是指向的自由存储区的数组,而非单个对象。如果遗漏了空方括号,编译器将无法发现这个错误,将导致程序在运行时出错。

完成了!以下是完整代码:

#include<iostream>
using namespace std;
int main(void)
{
    
int n=20;
    
int *p=new int[n];
    
for(int i=0;i<n;i++,p++)
    {
        cout
<<p<<endl;
        
*p=i;
    }
    p
--;
    
for(int *p2=p-n;p2!=p;p--)
    {
        cout
<<*p<<endl;
    }
    
    delete [] p;
    
    getchar();
}

posted on 2008-07-12 23:26 刘加加 阅读(12397) 评论(2)  编辑 收藏 引用

评论

# re: 创建和使用动态数组[未登录] 2013-03-15 11:03 坐行客
完整代码有错,释放了申请内存之外的内存。在delete前加一句p++即可。  回复  更多评论
  

# re: 创建和使用动态数组 2013-06-19 11:10 xx
楼上所言即是  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理