C程序设计第一章.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C程序设计第一章.ppt》由会员分享,可在线阅读,更多相关《C程序设计第一章.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章认识C+的对象11.2.3 动态分配内存动态分配内存 到目前为止,程序中我们只用了声明变量、数组到目前为止,程序中我们只用了声明变量、数组到目前为止,程序中我们只用了声明变量、数组到目前为止,程序中我们只用了声明变量、数组 和其他对象(和其他对象(和其他对象(和其他对象(objectsobjects)所必需的内存空间,这些内所必需的内存空间,这些内所必需的内存空间,这些内所必需的内存空间,这些内 存空间的大小都在程序执行之前就已经确定了。但如果存空间的大小都在程序执行之前就已经确定了。但如果存空间的大小都在程序执行之前就已经确定了。但如果存空间的大小都在程序执行之前就已经确定了。但如果
2、我们需要内存大小为一个变量,其数值只有在程序运行我们需要内存大小为一个变量,其数值只有在程序运行我们需要内存大小为一个变量,其数值只有在程序运行我们需要内存大小为一个变量,其数值只有在程序运行 时时时时(runtime)runtime)才能确定,例如有些情况下我们需要根才能确定,例如有些情况下我们需要根才能确定,例如有些情况下我们需要根才能确定,例如有些情况下我们需要根 据用户输入来决定必需的内存空间,那么我们该怎么办据用户输入来决定必需的内存空间,那么我们该怎么办据用户输入来决定必需的内存空间,那么我们该怎么办据用户输入来决定必需的内存空间,那么我们该怎么办 呢?呢?呢?呢?答案是动态内存分
3、配(答案是动态内存分配(答案是动态内存分配(答案是动态内存分配(dynamicmemorydynamicmemory)为此为此为此为此C+C+集成了操作符集成了操作符集成了操作符集成了操作符newnew和和和和deletedelete。21.2.3 动态分配内存动态分配内存new 动态分配内存动态分配内存一般格式:一般格式:指针变量指针变量=new 类型类型 size;new 运算符得到新分配空间的首地址,赋值运算符得到新分配空间的首地址,赋值给指针变量后,可根据指针变量的加减运算来使给指针变量后,可根据指针变量的加减运算来使用这些空间。用这些空间。delete 释放内存释放内存 使用完毕后要
4、释放内存使用完毕后要释放内存delete p;3 操作符操作符newnew的存在是为了要求动态内存。的存在是为了要求动态内存。new new 后后面跟一个数据类型,并跟一对可选的方括号面跟一个数据类型,并跟一对可选的方括号 里里面为要求的元素数。它返回一个指向内存块开始位面为要求的元素数。它返回一个指向内存块开始位置的指针。其形式为:置的指针。其形式为:p=new p=new 类型名类型名;/用来给一个单元素的数据类型分配内存。用来给一个单元素的数据类型分配内存。p=new p=new 类型名类型名 SIZE;SIZE;/用来给一个数组分配内存。用来给一个数组分配内存。P+3pP+1操作符操作
5、符 new new 和和 new new 4给一个数组分配内存给一个数组分配内存int a10,*p=a,i;int a10,*p=a,i;for(i=0;i10;i+)for(i=0;i10;i+)scanf(“%d”,p+i);scanf(“%d”,p+i);for(i=0;i10;i+)for(i=0;i k;cin k;/k=10/k=10p=new intk;p=new intk;for(int i=0;ik;i+)for(int i=0;i*(p+i);cin *(p+i);for(i=0;ik;i+)for(i=0;ik;i+)cout pi “;cout pi “;delete
6、 p;delete p;6给一个单元素的数据类型分配内存给一个单元素的数据类型分配内存#include using namespace std;struct Point int x,y;int main()/主程序主程序 Point *p;p=new Point;coutp-xp-y;coutxy;delete p;return 0;#include struct Point int x,y;int main()/*主程序主程序*/Point a,*p;p=&a;printf (“Input two interger:”);scanf(“%d%d”,&a.x,&a.y);printf(“%d%
7、d”,a.x,a.y);return 0;7 删除操作符删除操作符 deletedelete 既然动态分配的内存只在程序运行的某一既然动态分配的内存只在程序运行的某一具体阶段才有用,那么它不再被需要时就应具体阶段才有用,那么它不再被需要时就应该被释放,以便给后面的内存申请使用。操该被释放,以便给后面的内存申请使用。操作符作符delete delete 因此而产生,它的形式是:因此而产生,它的形式是:delete pointer;delete pointer;delete pointer;delete pointer;第一种表达形式用来删除给单个元素分第一种表达形式用来删除给单个元素分配的内存,
8、第二种表达形式用来删除多元素配的内存,第二种表达形式用来删除多元素(数组)的内存分配。(数组)的内存分配。在多数编译器中两种在多数编译器中两种表达式等价,使用没有区别表达式等价,使用没有区别,81.2.4 引用的使用方法引用的使用方法 C+中新的表示形式。中新的表示形式。引用即使用变量的别名。引用即使用变量的别名。定义形式:定义形式:数据类型数据类型&别名别名=对象名;对象名;作用:别名与对象名对应同一个对象,共用同一作用:别名与对象名对应同一个对象,共用同一段内存。对别名的修改会造成原对象的修改。段内存。对别名的修改会造成原对象的修改。例:例:int x;int&a=x;/表示表示a是变量是
9、变量x的别的别名。名。注意:一旦定义别名后则注意:一旦定义别名后则a和和x完全等价。完全等价。91.2.4 引用的使用方法引用的使用方法C+中新的表示形式。中新的表示形式。引用即使用变量的别名。引用即使用变量的别名。定义形式:数据类型定义形式:数据类型&别名别名=对象名;对象名;10引用是指给对象的地址取个别名,引用是指给对象的地址取个别名,数据类型数据类型&别名别名=对象名(正名)对象名(正名)intint a=56,b;a=56,b;intint&ra1=a;&ra1=a;intint&ra2=ra1;&ra2=ra1;对别名的改动则是对正名的改动。对别名的改动则是对正名的改动。引用不占有
10、存储空间,别名和对象引用不占有存储空间,别名和对象(正名)占有相同存储空间(正名)占有相同存储空间11引用作为函数参数引用作为函数参数-地址传递地址传递不能直接声明对数组的引用不能直接声明对数组的引用不能声明对引用的引用不能声明对引用的引用 intint&r=x;&r=x;()可以声明对指针的引用。可以声明对指针的引用。intint x,*p2=&x;x,*p2=&x;intint*&p1=p2;*&p1=p2;intint*&p3=p2;p1=&x;*&p3=p2;p1=&x;intint x=56;x=56;intint&a=x;&a=x;intint*p=&x;*p=&x;intint*
11、p=&a;*p=&a;12引用实例:引用实例:#include using namespace std;void main()int x=56;int&a=x;int&r=x;coutx=x&x=&xendl;couta=a&a=&aendl;coutr=r&r=&rendl;r=78;coutafter r=78endl;coutx=x&x=&xendl;couta=a&a=&aendl;coutr=r&r=&rendl;13使用引用时注意:使用引用时注意:1 1,不能定义引用的引用,不能定义引用的引用 int&r=x;int&r=x;2 2,不能直接定义数组的引用,不能直接定义数组的引用1
12、4数组的引用:数组的引用:一般格式:一般格式:typedef typedef 类型类型 类型别名类型别名使用使用typedeftypedef定义某类型别名后,可使用该定义某类型别名后,可使用该别名来定义相关对象。别名来定义相关对象。例如:例如:typedef long int lint;typedef long int lint;则则 long int i;long int i;等价于等价于 lint i;lint i;Typedef使用说明使用说明typedeftypedef用法总结:建立一个类型别名的方法用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型别很简单,在传统
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第一章
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内