第6章 指针,引用与动态内存分配.ppt
《第6章 指针,引用与动态内存分配.ppt》由会员分享,可在线阅读,更多相关《第6章 指针,引用与动态内存分配.ppt(40页珍藏版)》请在沃文网上搜索。
1、 如何上大学?9/26/20241 9/26/20242高高高高 等等等等 教教教教 育育育育 出出出出 版版版版 社社社社 20042004年第年第年第年第2 2版版版版 高级语言高级语言C+程序设计程序设计 第第 6 章章 指针,引用与动态内存分配指针,引用与动态内存分配 9/26/20243 本章重点本章重点 指针类型的使用指针类型的使用;指针与数组指针与数组 与与 字符串指针;字符串指针;指针与函数指针与函数;指针作参数,指针函数;指针作参数,指针函数 指针与动态内存分配指针与动态内存分配;new 与与 delete 导出数据类型:引用类型变量导出数据类型:引用类型变量.9/26/20
2、244一一.指针指针 -指针即地址指针即地址.int a10,*p1=a;地址地址 char str100,*p2=str;float x,*p3=&x;2001 2002 1.内存单元和地址内存单元和地址 2003 2004 内存单元-存放数据的内存空间 地址-内存单元的顺序编号2008内存单元 65 0000 0101 0000 0000 0000 1010 0000 0000 0000 0000 0000 0000 char c=A;long b=10;float x=1.0 int a=5;6.1 指指 针针 9/26/20245 2.变量与地址变量与地址变量的地址:变量的地址:&c=
3、2001&a=2002&b=2004&x=2008变量名变量名数据类型数据类型变量地址 C char 2001 a int 2002 b long 2004 x float 20089/26/202463.数组与地址数组与地址 -“数组名即地址数组名即地址”int array3=1,2,3;3210 array0 数组与地址对照表数组与地址对照表 3212 数组名数组名 数据类型数据类型 长度长度 首地址首地址 array1 array int 3 3210 3214 array2数组首地址数组首地址=array0;数组元素数组元素 arrayi =数组首地址数组首地址+i *数据类型长度数据
4、类型长度 的地址的地址0000000100000000000000100000000000000011000000009/26/20247二二.指针变量指针变量-取值为内存地址的变量。取值为内存地址的变量。1.指针变量的取值指针变量的取值-指针变量占用指针变量占用 2 个字节,存放个字节,存放 16位位的的 内存地址内存地址。例:例:int a=5,*p;地址地址 p=&a;2002 00000101 00000000 2.指针变量的作用指针变量的作用 -直接访问内存,直接访问内存,实现数据的读写。实现数据的读写。.改变不同的值,访问不同的单元改变不同的值,访问不同的单元例:例:cin *p;
5、xxxx2002 p=&a;*p=10;(变量变量 a 的值变为的值变为 10)9/26/20248一一.指针变量的定义和初始化指针变量的定义和初始化 1.定义格式:定义格式:数据类型数据类型 *指针变量名指针变量名 【=变量地址变量地址】;例:例:int a10,*p1=a;/*数组名即地址数组名即地址*/char ch,*p2=&ch;/&-取地址运算符取地址运算符float x10,*p3=x;char str100,*p4=str;2.指针运算符指针运算符-*作用:作用:(在声明语句中在声明语句中)定义指针变量;定义指针变量;(在执行语句中在执行语句中)表示读写内存数据;表示读写内存数
6、据;例:例:int i,a10,*p=a;/在声明语句中定义指针变量在声明语句中定义指针变量p for(i=0;i*p+;/在执行语句中表示读写内存数据在执行语句中表示读写内存数据 while(-i=0)cout*(-p)*q j;3.通过指针变量引用它所指向的变量通过指针变量引用它所指向的变量例:例:int i=1,j=2,k,*p=&i;k=*p+j;三三.取地址运算符与指针运算符取地址运算符与指针运算符1.&-取运算对象的地址;取运算对象的地址;格式:格式:int a,b10,*p1,*p2;p1=&a;p2=&b1;9/26/2024102.*-用于访问地址对应的存储单元用于访问地址对
7、应的存储单元(指针所指向的变量或数组元素)(指针所指向的变量或数组元素)例例1:char str30=“Beijing2008”,*p=str;while(*p)cout*p+;例例2:char str30=“Beijing2008”,*p=str;for(p=str+7;*p!=0;p+)cout*p;【注注】&的运算对象必须是已定义过的变量或数组元素,但不可以的运算对象必须是已定义过的变量或数组元素,但不可以 是数组名。是数组名。*指针运算符的运算对象必须是地址,不能是整数,也不能指针运算符的运算对象必须是地址,不能是整数,也不能 是非地址型的变量。是非地址型的变量。&和和*优先级相同,优
8、先级相同,自右向左自右向左的结合性。的结合性。例例3:float a,*pa=&a;*&a -代表变量代表变量 a;&*a -错误,错误,因为因为 a 不是地址。不是地址。9/26/202411一一.指针的类型指针的类型1.指针的类型即声明指针时的数据类型指针的类型即声明指针时的数据类型指针声明格式:指针声明格式:数据类型数据类型 *指针变量名指针变量名 【=变量地址变量地址】;例:例:int a,*p1=&a;/*a不是地址,所以必须加不是地址,所以必须加&运算符运算符*/float s5,*p2=s;/*s 是地址是地址*/p2=&s1;/*s1 不是地址不是地址,所以必须加,所以必须加&
9、运算符运算符*/2.指针的类型决定了指针在内存空间移动的位置大小指针的类型决定了指针在内存空间移动的位置大小例:若例:若 char *p;则则 p+;移动移动 1个字节个字节;例:若例:若 int *p;则则 p+;移动移动 2个字节个字节(C)或或 4个字节个字节(C+);例:若例:若 float *p;则则 p+;移动移动 4个字节个字节;6.1.26.1.2 指针类型及指针运算指针类型及指针运算 9/26/202412二二.指针变量的运算指针变量的运算(1)指针变量和整数的运算指针变量和整数的运算 指针变量指针变量+整数整数 n -相当于指针向后移动了相当于指针向后移动了n个数据的位置个
10、数据的位置 指针变量指针变量-整数整数 n -相当于指针向前移动了相当于指针向前移动了n个数据的位置个数据的位置 指针变量指针变量+-先用指针的值,然后向后移动了先用指针的值,然后向后移动了 1 个数据的位置个数据的位置 指针变量指针变量-先用指针的值,然后向前移动了先用指针的值,然后向前移动了 1 个数据的位置个数据的位置 +指针变量指针变量-指针向后移动了指针向后移动了 1 个数据的位置个数据的位置 -指针变量指针变量 -指针向前移动了指针向前移动了 1 个数据的位置个数据的位置(2)指针变量和指针变量的减法运算指针变量和指针变量的减法运算若若 p1 和和 p2 指向同一类型的数据,则指向
11、同一类型的数据,则 p2 p1 表示两个指针之间数据的个数表示两个指针之间数据的个数.【注注】两个指针变量不能进行加运算。两个指针变量不能进行加运算。(3)指针变量的关系运算指针变量的关系运算-同类型指针可以进行关系运算同类型指针可以进行关系运算.格式:格式:指针变量指针变量1 关系运算符关系运算符 指针变量指针变量2 9/26/202413三三.指针变量的使用指针变量的使用1.给指针变量赋值给指针变量赋值格式:格式:指针变量指针变量=地址表达式;地址表达式;例:例:int a,*p1=&a;/*a表示地址,所以必须加表示地址,所以必须加&运算符运算符*/float s5,*p2=s;/*s
12、是地址是地址*/p2=&s1;/*s1 不是地址不是地址,所以必须加,所以必须加&运算符运算符*/2.引用所指向的变量引用所指向的变量引用格式:引用格式:*指针变量指针变量 (或或 *数组名数组名)例:设例:设 int a10,*p=a;数组元素数组元素 a4 的正确引用是的正确引用是 ()A.*(p+4)B.P+4 C.*p+4 D.a+4例例2:设设 int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则不能表示数组则不能表示数组 a 中中 元素的是元素的是()A.*p B.A10 C.*a D.Ap-a例例3:设设 char a20=“Awitch”,*p=a;则则*(p
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章 指针 引用与动态内存分配 指针 引用 动态 内存 分配