- 1、本文档共99页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
上海海事大学大学物理学(二)第六章
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 实际上,在虚实结合时是把实参i的地址传到形参a,使形参a的地址取实参i的地址,从而使a和i共享同一单元。同样,将实参j的地址传到形参b,使形参b的地址取实参j的地址,从而使b和j共享同一单元。这就是地址传递方式。为便于理解,可以通俗地说: 把变量i的名字传给引用变量a,使a成为i的别名。 请思考: 这种传递方式和使用指针变量作形参时有何不同?分析例6.20(对比例6.19),可以发现: ① 使用引用类型就不必在swap函数中声明形参是指针变量。指针变量要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不单独占内存单元。 ② 在main函数中调用swap函数时,实参不必用变量的地址(在变量名的前面加),而直接用变量名。系统向形参传送的是实参的地址而不是实参的值。 显然,这种用法比使用指针变量简单、直观、方便。使用变量的引用,可以部分代替指针的操作。有些过去只能用指针来处理的问题,现在可以用引用来代替,从而降低了程序设计的难度。 例6.21 对3个变量按由小到大的顺序排序。 可以看到: (1) 这个程序很容易理解,不易出错。 (2) 执行change (i,j)函数,可以实现对实参i和j的互换。 当看到a这样的形式时,怎样区别是声明引用变量还是取地址的操作呢? 当a的前面有类型符时(如int a),它必然是对引用的声明;如果前面无类型符(couta),则是取变量的地址。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * 对字符串中字符的存取,可以用下标方法,也可以用指针方法。例6.13 将字符串str1复制为字符串str2。 定义两个字符数组str1和str2,再设两个指针变量p1和p2,分别指向两个字符数组中的有关字符,通过改变指针变量的值使它们指向字符串中的不同的字符,以实现字符的复制。 #include iostream using namespace std; int main( ) { char str1[]=″I love CHINA!″,str2[20],*p1,*p2; p1=str1;p2=str2; for(;*p1!=′\0′;p1++,p2++) *p2=*p1; *p2=′\0′; p1=str1;p2=str2; cout″str1 is: ″p1endl; cout″str2 is: ″p2endl; return 0; } 运行结果为 str1 is: I love CHINA! str2 is: I love CHINA! 图6.19 指针变量也可以指向一个函数。 一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。 例6.14 求a和b中的大者。 6.5 函数与指针 6.5.1 用函数指针变量调用函数 可以用一个指针变量指向max函数,然后通过该指针变量调用此函数。定义指向max函数的指针变量的方法是: int (*p) (int,int); p所指向的函数的形参类型 p是指向函数的指针变量 指针变量p指向的函数的类型 将它和函数max的原型作比较 int max(int,int); //max函数原型 可以看出: 只是用(*p)取代了max,其他都一样。现在将上面程序的主函数修改如下: #include iostream using namespace std; int main( ) {int max(int x,int y); //函数声明 int (*p)(int,int); //定义指向函数的指针变量p int a,b,m; p=max; //使p指向函数max cinab; m=p(a,b); cout″max=″mendl; return 0; } 请注意第7行的赋值语句“p=max;”。此语句千万不要漏写,它的作用是将函数max的入口地址赋给指针变量p。这时,p才指向函数max。见图6.20。
文档评论(0)