02指针与动态内存管理课案.pptx

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第02章指针与动态内存分配 -2- 本章内容安排 指针与动态内存分配 函数及参数传递 雇员管理系统版本1(数组) 雇员管理系统版本2(动态内存分配) -3- 1、指针变量 地址的概念 定义一个变量,程序执行后数据会加载到内存中的某个地方,计算机如何找到这个地方? 地址:内存按字节编号,0、1、2…… 存储单元的编号就是该单元的地址,它表明了该存储单元在内存中的位置 系统根据变量的地址而不是任何别的东西寻找某个变量。 变量的地址:变量占用的首个存储单元的地址 -4- 变量的地址 变量的地址 变量a占用的是内存的2000~2003四个单元,变量a的地址为2000。 源代码中写a=5;我们可以理解为将5赋给变量a;而计算机在执行程序时,只是将5送入2000~2003四个存储单元中。 -5- 指针变量 int a=5; int *pa; pa=a; 指针变量pa指 向变量a -6- 2、指针变量的使用要点 引用前一定要初始化 int a=5; int *pa; // pa=a; 一定要初始化 *pa=10; -7- 指针变量的使用要点 数据类型要匹配 指针变量的数据类型,必须与其所指向的变量的数据类型一致。 不可以在不同类型指针变量之间赋值。 指针变量中存储的是一个表示地址的整数值,但不可以将一个整数值直接赋给指针变量。 -8- 指针变量的使用要点 void指针及强制类型转换 int a=7, *pa=a; double b=2.5,*pb=b; void *pv; pv=pa; cout *(int *)pvendl; pv=pb; cout*(double *)pvendl; 任意类型指针都可赋值给void类型 符合原来的类型 -9- 3、指针与一维数组 通过下标访问数组元素 int a[10]; int k; for(k=0;k10;k++) { a[k] = k; } 程序员负责检查下标是否越界! -10- 指针与一维数组 通过数组名访问数组元素 int a[10]; int k; for(k=0;k10;k++) { *(a+k) = k; } -11- 指针与一维数组 通过指针变量访问数组元素 int a[10]; int k,*p; p=a; for(k=0;k10;k++) { *(p+k)=k; } 或p=a[0]; 或者p[k]=k; -12- 指针与一维数组 指针变量和数组名的使用区别 a[k] p[k] *(a+k) *(p+k) for(k=0;k10;k++) { *p++=k; } a不能被改变 X *a++=k; -13- 4、指向数组的指针 数据类型 (*指针变量名)[常量表达式] int a[2][3]={……}; int (*p)[3]; p=a; for(int i=0;i2;i++) { for(int j=0;j3;j++) { p[i][j] =…… } } 指向数组的指针常用于指向二维数组 -14- 指向数组的指针 访问数组元素的其它方式 a[i][j] p[i][j] *(a[i]+j) *(p[i]+j) *(*(a+i)+j) *(*(p+i)+j) -15- 5、指针数组 数据类型 *变量名[常量表达式] int a,b,c,d; int *p[4]={a,b,c,d}; int aa[2][3]; int (*pa)[3]; pa=aa; 定义含4个元素的指针数组,p只是数组名 pa是指针变量,指向含3个int元素的一维数组 -16- 6、二级指针 指向指针的指针 int a=a; int *pa=a; int **ppa=pa; a=5; *pa=5; **ppa=5; -17- 二级指针示例 二级指针经常与指针数组配合使用 char **p; char *name[]={“hello”, “good”, “world”, “bye”, “”}; p=name; while(**p!=NULL) { cout *p++ endl; } 运行结果 hello good world bye 判断第一个字符是否为’\0’ -18- 7、动态内存分配 开辟某种类型的单个空间 int *p; if((p=new int) == NULL) { cout“error”endl; exit(0); } *p=5; …… delete p; 用相同类型的指针接收 malloc返回v

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档