问题及代码
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:辛彬 * 完成日期:2014年 12 月 20 日 * 版 本 号:v1.0 * * 问题描述: 阅读下面的程序,写出期望中的运行结果。上机运行对照,并用单步执行的方法再次体会,完全掌握用指针和引用作为形式参数的用法。。 * 输入描述:没有输入。 * 程序输出:结果; */ #include <iostream> using namespace std; void fun1(int &x,int &y); void fun2(int *x, int *y); int main() { int a,b; a=11; b=22; fun2(&a,&b); cout<<"a="<<a<<" b="<<b<<endl; fun1(a, b); cout<<"a="<<a<<" b="<<b<<endl; return 0; } void fun1(int &x,int &y) { int t; t=x; x=y; y=t; } void fun2(int *x, int *y) { int *t; t=x; x=y; y=t; }
运行结果:
学习感悟:一开始我还想为什么fun2函数没有交换a和b的值,说好的函数中调用指针能改变的呢?通过单步调试才发现,fun2函数只是进行了地址的交换,而没有进行指向a,b的操作。更好理解的话,要实现进行交换的功能,就得改成如下形式:
void fun2(int *x, int *y) { int t; t=*x; *x=*y; *y=t; }