动态内存分分配

大多数程序在运行时,计算机中会有部分的内存未分配,这些内存叫堆或叫自由存储器。我们可以用new操作符在堆中为特定类型的变量分配空间,返回值是分配给此变量的内存地址。释放分配的空间是用delete操作符。

在内存中操作指针比操作变量本身速度更快更有效,特别是对于数组。

一 给简单变量分配动态内存

如我们要在内存中给一double型变量分配空间,我们可以先声明一个double型指针,然后再给此对象赋值:

  double* pdata=NULL;

      pdata=new double;

      *pdata=3.665;(等同于pdata=new doulbe(3.665);)

    delete pdata;

 pdata=0;(或pdata=NULL).

    pdata=new double(3.665)为初始值,即在分配内存空间时指定的值,而*pdata=3.665是给对象赋值。

 delete pdata;是销毁用new 分配的空间。

  在delete指针后,最好带上pdata=0.表示此指针已不指向任何值。

二 给数组分配动态内存

    为数组分配动态内存非常简单,如为一数组分配一个指针pstring.

    char* pstring=new char[20];

    即数组为20个元素的char类型数组,此时pstring指向第一个元素。

  *(pstring+1)为第二个元素的值.

   数组销毁时用 delete [] pstring. 中括号表示删除的变量为数组变量。变量删除后为防止原变量指针被其它程序占用,把变量指针设置为0即可,即pstring=0;

 以下为操作整形类型的例子:

   

#include <iostream>
using namespace std;

void main()
{
int* p=new int[3];  //分配内存空间
*p=11; //给相关元素赋值
*(p+1)=50;
*(p+2)=33;

for(int i=0;i<3;i++)
printf(
"元素[%d]的地址 %x, 内容: %d\n",i,p+i,*(p+i));
delete [] p; //销毁分配的数组空间
p
=0;       //清查指针,使其不指向任何数据

}

显示结果为:

    数组的空间是连续分配的,int类型的大小为4个字节,你会发现每个指针位置相差一个整型即4个字节。

如果是多维数组,和一维数组一样操作。

  如 int* p=new int[10][15][20];

 销毁时也是用delete []  p即可。

posted on 2011-08-16 15:55  天上星  阅读(419)  评论(0编辑  收藏  举报

导航