网站大量收购独家精品文档,联系QQ:2885784924

c++语言程序设计教学课件作者赵海廷第6章.ppt

c++语言程序设计教学课件作者赵海廷第6章.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.4 指向数组的指针与多级指针 一维数组,这种指针又称为行指针。“pra=a;”是使指向数组的指针pra指向数组a。pra+1等价于a+1;可以通过以下形式应用a数组元素a[i][j]: *(pra[i]+j) 等价于 *(a[i]+j) *(*(pra+i)+j) 等价于 *(*(a+i)+j) (*(pra+i))[j] 等价于 (*(a+i))[j] pra[i][j] 等价于 a[i][j] 在此,pra是指向数组的指针变量,其值是可变的,而a是地址常量,其值不能变化。 上一页 返回 下一页 6.4 指向数组的指针与多级指针 注意: (1)当二维数组名作为实参时,对应的形参必须是行指针变量。若有: #define M 5 #define N 3 main() { int s[M][N]; …; fun(s); …} 函数fun()的形参可以是以下三种形式之一: fun(int (*a)[N])或fun(int a[ ][N])或fun(int a[M][N]) 下一页 返回 上一页 6.4 指向数组的指针与多级指针 (2)当指针数组作为实参时,对应的形参应是指向指针的指针,也就是二级指针。若有: #define M 5 #define N 3 main() { int s[M][N],*ps[M],k; …; for(k=0;kM;k++) ps[k]=s[k]; fun(s); … } 上一页 下一页 返回 6.4 指向数组的指针与多级指针 6.4.2 多级指针 在 C++语言中,数组中的数据可以使用相应的指针进行“处理”。我们可以扩展为指针数组中的“数据”也可以用指针进行相应的处理,即指针数组也可以用另一个指针进行处理。我们把指向指针的指针称为二级指针,二级及其以上的指针都称为多级指针。对于二级指针的定义与指针定义的差别是在指针名前多加一个“*”号。若是n级指针,就是在定义指针时在指针名的前面加n个“*”号。 上一页 下一页 返回 6.4 指向数组的指针与多级指针 例如:有一个字符型指针数组是:“ char * str[3];”,它的三个元素str[0],str[1],str[2]都是指针,它们分别指向一个字符串,如图 6?6所示,三个字符串的首字符分别由 *str[0],*str[1],*str[2]表示。如果同时有另一个指针 ps,且把指针数组str的首地址赋给指针ps: ps=str 或ps=str[0] 则ps指针就指向指针数组str[ ],因此ps的目标 *ps 就是str[0],*(ps+1)就是str[1],*(ps+2)就是str[2]。 上一页 下一页 返回 6.4 指向数组的指针与多级指针 在图6?6中,指针str[0的目标就是*str[0],即指向字符h。如果用二级指针表示,str[0]是 *ps,所以 *str[0] 就是 **ps。二级指针 ps 指向指针 *ps,它是一级指针,*ps 指向被处理的数据是 **ps。同理,**(ps+1)和**(ps+2)分别指向另外两个字符串的首字符。如果还存在一个指向ps的指针,则该指针就是三级指针。 多级指针的定义和一级指针的定义类似,存储属性是指指针本身的存储属性,而数据类型则是最低层目标数据类型。 上一页 返回 6.5 指针与函数 6.5.1 作为函数参数的指针 我们在介绍函数时介绍了 C++语言的函数间传递数据有传值方式、传址方式以及利用全局变量和 return 语句传递处理结果的各种方式。已经讲述过,函数间采用传值方式传递数据时,被调函数并不能改变主调函数中变量的内容。而使用传址方式却可以达到上述目的。 返回 下一页 6.5 指针与函数 函数是: void swap( int a,int b) { int temp; 130 C++ 语言程序设计 cout刚进入 swap(a,b) 函数中的 a 和 b 的值是:\n; couta=ab=bendl; cout 进行交换之后的 a 和 b 的值是:\n; temp=a;a=b;b=temp; couta=ab=bendl} 返回 上一页 下一页 6.5 指针与函数 当主调函数需要进行两个元素交换时,调用 swap()函数并未达到使 x,y 交换其值的目的。原因是用传值方式传递数据,形式参数和实在参数各自占用不同的存储单元,而形式参数间内容的交换并没有影响到主调函数中实在参数的内容。如图6?7(a)所示。 函数;swap()函数的形式

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档