#include<stdio.h> void myswap(int,int); int main() { int a, b; printf("请输入待交换的两个整数:"); scanf("%d %d", &a, &b); myswap(a,b); //分三个程序,分别写上调用myswap的合适形式 printf("调用交换函数后的结果是:%d 和 %d\n", a, b); return 0; } //(1)传值 void myswap(int x, int y) { int t; t=x; x=y; y=t; }<img src="http://img.blog.csdn.net/20150911084806259?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
结论:在学习了一年C++后很明显可以看出来这个程序不能实现,调用函数本身不对实参进行操作,只改变形参,因此实参的值不受影响。
#include<stdio.h> void myswap(int *,int *); int main() { int a, b; printf("请输入待交换的两个整数:"); scanf("%d %d", &a, &b); myswap(&a,&b); printf("调用交换函数后的结果是:%d 和 %d\n", a, b); return 0; } //(2)传地址 void myswap(int *p1, int *p2) { int t; t=*p1; *p1=*p2; *p2=t; }
结论:从程序可以看出,该程序是把实参的地址赋给形参,最后实现实参和形参的转换。
#include<stdio.h> void myswap(int &,int &); int main() { int a, b; printf("请输入待交换的两个整数:"); scanf("%d %d", &a, &b); myswap(a,b); printf("调用交换函数后的结果是:%d 和 %d\n", a, b); return 0; } //(3)引用作形参 void myswap(int &x, int &y) { int t; t=x; x=y; y=t; }
结论:由运行结果看,进行了交换。如果以引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。
知识点总结:
此程序考察了我们对这3种传递方式的理解,掌握它们有助于我们以后的学习。