第六章指针解释.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 指针;变量的指针和指向变量的指针变量;变量的指针和指向变量的指针变量;变量的指针和指向变量的指针变量;利用前一个例子,我们说说指针变量作为函数参数的传递 Swap是用户定义的函数,它的作用是交换俩个变量(a和b)的值。Swap函数的俩个 形参p1和p2是指针变量。程序运行时,先执行main函数,输入a和b的值,然后将a和b 的地址分别付给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b, 接着执行Swap函数,注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实 参变量的值传递给形参变量,采取依然是“值传递”,因此采用虚实结合后形参p1的值为 a,p2的值是b,如图。这是p1和pointer_1都指向a,p2和pointer_2都指向b,接着执行 Swap函数的函数体,使*p1和*p2互换。也就是a和b的值互换。互换后的情况如图, 函数调用后,p1和p2不复存在(已释放),情况如图,最后在主函数中输出a和b的值 意识交互过的值。;数组的指针和指向数组的指针变量;数组的指针和指向数组的指针变量;对上一节三个例子的讨论: 1.1和2执行效率是相同的。因为C编译系统是将a[i]转换为*(a+i)处理的,即先计算地址. 2.3比1和2 快,用指针变量直接指向元素,不必每次都重新计算地址。 3.用下标法直观明了,能直接指导是第一个元素。用指针法或指针变量不直观。 另外,使用指针变量应注意以下几点: 1.指针变量可以实现本身的值改变。如,如例子3中的用指针变量p来指向元素, 用p++来实现p的值改变。如改为a++,则不行,因为a是数组名,它是数组的首地址 2.要注意指针变量的当前指向值。 3.注意指针变量的运算。。如果先使p指向数组a(即p=a)则 ⅰp++或(p+=1),使p指向下一个元素,即a[1]; ⅱ*p++,由于++与*同优先级,结合方向是右至左,因此它等价于*(p++),作用是 先得到p所指向的变量的值(*p),然后再使p+1=p ⅲ*(p++)和*(++p)作用不同,前者是先取*p的值,后使p+1,后者是先使p+1,在 取 *p。 ⅳ(*p)++表示p所指向的元素加1,即(a[0]++)如果a[0]=3,则(a[0])++=4,注意 是元素加1,。而不是指针加1 ⅴ如果p当前指向a数组中第i个元素,则 *(p--)相当于a[i--],先对p进行*运算,在使p自减 *(++p)相当于a[++i],先使p自加,再做*运算 *(--p)相当于a[--i],先使p自减,再做*运算。;数组的指针和指向数组的指针变量;我们把用变量名作为函数参数合用数组名作为函数参数做一个比较 ;总结,如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应 关系,有以下4种: 1.形参和实参都用数组名,如: Main() f(int x[],int n) 程序中的实参a和形参x都定义为数组,由于传递的 { int a[10]; { 是a的首地址,a和x数组公用一段内存单元。 : : f(a,10); } :} 2.实参用数组名,形参用指针变量,如: Main() f(int *x,int n) 实参a为数组名,形参x为指向整型变量的指针变量 { int a[10]; { 函数开始执行时,x指向a[0];即x=a[0];通过x值得改变 : : 可以指向a数组的任一元素, f(a,10); } :} 3.实参形参都用指针变量,如 Main() f(int *x, int n) 实参p和形参x都是指针变量,先使实参指针变量p指向 { int a[10],*p; { 数组a,p的值是a[0];,然后将p的值传给形参指针变量 p=a; : x,x得初始值也是a[0], :

文档评论(0)

金不换 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档