`
fpwjp
  • 浏览: 45184 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

动态内存分配

    博客分类:
  • C++
阅读更多

运算符new用于动态分配内存,其一般的语法如下:

new <数据类型>[<整型表达式>]

其中<数据类型>可以是基本数据类型、结构等。它表示要分配与<数据类型>相匹配的内存空间。<整型表达式>表示要分配内存单元的个数(以该种数据类型的长度为单位),可以省略,其默认值1。new运算符返回所分配内存单元的起始地址,因此需要把该返回值赋值给一个指针变量。如果当前内存没有足够的空间可分配,则new运算符返回NULL,并抛出一个运行异常。

以下是使用new运算符为简单变量分配内存的例子

 

int *pNum=new int;                                //为整型变量(其指针为pNum)分配内存空间

float *px=new float;                               //为单精度变量(其指针为px)分配内存空间

 

new运算可用来创建一个动态数组,如下所示.

 

char *pBuffer=new char[256];                 //为字符串分配内存空间

int *pA=new int[size];                             //创建动态数组pA,可键盘输入size的值

student *stu=new student[num];           //创建student结构动态数组stu

 

运算符delete用于释放new运算所分配的内存空间,其一般语法形式如下:

 

delete <指针变量>;

 

例如:

 

delete pNum;

 

如果要释放一个动态数组所占用的内存空间,应采用如下形式:

 

delete []pA;

 

例:著名Fibonacci数列的定义是:F(0)=F(1)=1,F(n)=F(n-1)+F(n-2)。利用动态数组求Fibonacci数列的前n项。

利用动态数组求Fibonacci数列的前n项

 

#include <iostream.h>
#include <stdlib.h>

void main()
{
	int *f,n;
	cout <<"Please input n=?";
	cin >> n;
	f=new int[n+1];		//为动态数组f分配n+1个内存单元
	if(f==0||n<1)
	{
		cout <<"Heap Error or Input Error!\n";
		exit(1);
	}
	f[0]=f[1]=1;
	cout <<f[0]<<endl<<f[1]<<endl;
	for(int i=2;i<n;i++)
	{
		f[i]=f[i-2]+f[i-1];
		cout << f[i] << endl;
	}

	delete []f;		//释放动态数组f所占的内存空间
}

 

new运算符所创建变量的初始值是任意的,在程序中可以使用赋值运算为创建的变量赋值。也可以利用new运算分配内存同时进行初始化,如下所示。

pi=new int(100);                                    //*pi单元的初始值为100,区别:oi=new int[100]

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics