如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
C/C++语言都是编译性的语言,要求程序的变量必须事先声明,以便在编译的过程中为每一个变量分配相应的内存空间。变量在程序运行期间不能增加也不能减少,这在许多的应用中很不方便。C++语言的动态内存分配机制为克服这种不便提供了手段。所谓动态分配内存是指在程序运行的过程中,为程序分配大小不可预知的内存空间。动态内存分配需要用到指针,new运算符和Delete运算符。New运算符使用New运算符动态申请内存空间时,可以为其指定初值。其形式是:pointer=newtype(初始值);例如:int*p;p=newint(5);Delete运算符#include<iostream.h>Voidmain(){int*p;p=newint(5);if(p==0){cout<<“memoryallocationfailture!!”<<endl;exit(1);}*p=*p+2;cout<<“thevalueofpis:”<<p<<endl;deletep;}由于C++语言的变量说明非常灵活,所以为单个变量申请动态内存的实用价值不大,通常都是为一个数组申请一块动态内存(称为动态数组)。申请动态数组的一般形式为:pointer=newtype[c1][c2][c3]…;其中:各ci均为整型常量。int*p;p=newint[5];#include<Iostream.h>main(){int*p,i,n;floatsum=0,average;cin>>n;p=newint[n];for(i=0;i<n;i++)cin>>p[i];for(i=0;i<n;i++)sum=sum+p[i];average=sum/n;cout<<average<<endl;delete[n]p;}注意:不允许为动态分配的内存指定初始值int*pi;pi=newint[5]={1,2,3,4,5}当内存分配成功后,一般不允许修改指针变量的值,否则在执行的后果不可预知。int*p=newint[10];p=p+2;delete[10]p;New运算符和delete运算符小节2.4C++对数据类型的扩充引用类型的定义#include<Iostream.h>voidmain(){intn=10;int&rn=n;n=n+30;cout<<“n=”<<n<<endl;cout<<“rn=”<<rn<<endl;rn=rn+40;cout<<“n=”<<n<<endl;cout<<“rn=”<<rn<<endl;}例如:floatstud=4.8;float&fstud=stud;4.引用类型被初始化后,就不能在被其变量的引用。inta,b;int&rp=a;int&rp=b;5.不能说明数组的引用。例如:inta[10];int&b[10]=a;数组是某个数据类型元素的集合,数组名是该元素集合在内存的首地址,不是一个基本数据类型。6.可以为一个变量多次说明引用例如:flaotp=3.14;float&fp=p;float&ffp=fp;由于指针变量也是基本数据类型,可以有指针变量的引用。例如:voidmain(){int*pn,n=20;int*&rn=pn;rn=&n;cout<<“n=”<<n<<endl;cout<<“*pn=”<<*pn<<endl;cout<<“*rn=”<<*rn<<endl;cout<<“pn=”<<pn<<endl;cout<<“rn=”<<rn<<endl;voidmain(){char*str=“goodluckchina!”char*&pstr=str;cout<<“str->”<<str<<endl;cout<<“pstr->”<<pstr<<endl;str++;cout<<“str->”<<str<<endl;cout<<“pstr->”<<pstr<<endl;pstr++;cout<<“str->”<<str<<endl;cout<<“pstr->”<<pstr<<endl;}引用在大部分的情况下可以取代指针,使得程序清晰易懂引用作为函数的参数voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}voidmain(){inta=3,b=5;*p,*q;p=&a;q=&b;swap(p,q);cout<<a<<“\t”<<b<<endl;}voidswap(int&x,int&y){inttemp;temp=x;x=y;y=temp;}voidmain(){inta=3,b=5;s