第5-6章指针与函数动态存储分配指针作为函数参数指针作为函数返回值指向函数的指针递归函数函数重载带参数的main()函数程序中使用的变量、数组和函数必须先声明后使用,编译系统根据声明语句开辟内存空间,因此数据占用的存储空间是固定的。这种内存储器分配方法被称为静态存储分配动态存储分配(dynamicallocation)是在程序运行过程中随机获得内存存储空间的方法C++用运算符new和delete实现动态存储分配动态存储分配运算符new用来申请所需的内存 <指针>=new<类型>(<初值>);例如:int*pw;pw=newint;*pw=100;合并成一条语句:int*pw=newint(100);//动态、堆区等价于:inti=100;//静态分配,在函数区域也可为数组申请内存: <指针>=new<类型>[<元素数>];例如double*pk;pk=newdouble[50];合并成一条语句:double*pk=newdouble[50];等价于:doublea[50];new的使用运算符delete用于释放先前申请到的存储块 delete<指针>;例如:int*pi=newint;……deletepw;若要释放数组的空间,必须放一个空的方括号[]在操作符delete和指向该类对象数组的指针之间例如:int*p=newint[size];……delete[]p;delete的使用#include<iostream>usingnamespacestd;intmain(){ intp[10000]; intn; cout<<“输入项数(<10000):"; cin>>n; p[0]=0; p[1]=1; cout<<p[0]<<endl; cout<<p[1]<<endl; for(inti=2;i<n;i++) { p[i]=p[i-2]+p[i-1]; cout<<p[i]<<endl; } return0;}#include<iostream>usingnamespacestd;intmain(){ intn; cout<<“输入项数:"; cin>>n; int*p=newint[n];//申请数组空间 if(p==0||n<=0) {//如果没有申请到内存或数据输入有误,则返回 cout<<"Error!"<<endl; return-1; } p[0]=0; p[1]=1; cout<<p[0]<<endl; cout<<p[1]<<endl; for(inti=2;i<n;i++) { p[i]=p[i-2]+p[i-1]; cout<<p[i]<<endl; } delete[]p; //释放数组空间 return0;}利用动态数组来求斐波那挈数列的前n项一元多项式求解假设有如下一元多项式: anXn+an-1Xn-1+......+a1X1+a0编写程序求该多项式的值和多项式导数的值这两个结果值的计算都必须采用函数求得,具体函数原型如下: doubledxs(doublea[],doublex,intn) doubledxsds(doublea[],doublex,intn)形式参数a[]用来存放多项式n+1个系数,x为多项式的变量,n为次方数。(提示:先输入某个多项式系数,然后输出该多项式及其导数多项式,再输入某个x的值,再输出多项式和导数的计算结果值)#include<iostream>//没有动态存储分配的求解usingnamespacestd;voidprint(doublea[],intn){ if(a[0]>0) cout<<a[0]; if(a[0]<0) cout<<"("<<a[0]<<")"; for(inti=1;i<=n;i++) { if(a[i]>0) cout<<"+"<<a[i]<<"x^"<<i; if(a[i]<0) cout<<"+("<<a[i]<<")"<<"x^"<<i; } cout<<endl;}voidfun1(doublea[],intk,intn){ for(intj=1;j<=k;j++) for(inti=1;i<=n;i++) a[i-1]=a[i]*i; n--; }doublefun(doublea[],doublex,intn){ doublesum=0; for(inti=n;i>0;i--) sum=(sum+a[i])*x; sum=sum+a[0]; returnsum;}intmain(){ doublea[100],a1[100]; doublex; intn,k; cout<<“请输入多项式的次数(不能超过99):"; cin>>n; cout<<"请依次输入"<<n<<"次多项式的系数(”<<n+1<<“个
西安交大 来自淘豆网www.taodocs.com转载请标明出处.