第二周项目1-C/C++语言中函数参数传递的三种方式

来源:互联网 发布:福禄克网络 dsx 8000 编辑:程序博客网 时间:2024/05/16 01:29

问题及代码

/**Copyright (c) 2015,烟台大学计算机学院*All rights reserved.*文件名称:test.cpp*作者:王敏*完成日期:2015年09月07日*版本号:v1.0**问题描述:C/C++语言中函数参数传递的三种方式*输入描述:两个待交换的值程序输出:交换后的两个值*///(1)传值#include<stdio.h>void myswap(int x, int y){    int t;    t=x;    x=y;    y=t;}int main(){    int a, b;    printf("请输入待交换的两个整数:");    scanf("%d %d", &a, &b);    myswap(a,b);  //分三个程序,分别写上调用myswap的合适形式    printf("调用交换函数后的结果是:%d 和 %d\n", a,b);    return 0;}


运行结果

 

运行结果解释

此程序不能实行两个值的交换,函数在调用时是隐含地把实参a,b 的值分别赋值给了x,y,之后在myswap函数内再也没有对a,b进行任何的操作了。交换的只是x,y变量。并不是a,b.当然a,b的值没有改变啦!函数只是把a,b的值通过赋值传递给了x,y,函数里头操作的只是x,y的值并不是a,b的值。这就是所谓的参数的值传递了

 

问题及代码

//(2)传地址#include<stdio.h>void myswap(int *p1, int *p2){    int  t;    t=*p1;    *p1=*p2;    *p2=t;}int main(){    int a, b;    printf("请输入待交换的两个整数:");    scanf("%d %d", &a, &b);    myswap(&a,&b);    printf("调用交换函数后的结果是:%d 和 %d\n", a,b);    return 0;}


 

 

运行结果

运行结果解释

此程序可以实现两个值的交换,将a,b的地址值传递给了p1,p2,而不是传递的a,b的内容指针px,py的值已经分别是a,b变量的地址值了。接下来,对*p1,*p2的操作当然也就是对a,b变量本身的操作了。所以函数里头的交换就是对a,b值的交换了,这就是所谓的地址传递(传递a,b的地址给了p1,p2).

问题及代码

//(3)引用作形参#include<stdio.h>void myswap(int &x, int &y){    int t;    t=x;    x=y;    y=t;}int main(){    int a, b;    printf("请输入待交换的两个整数:");    scanf("%d %d", &a, &b);    myswap(a,b);    printf("调用交换函数后的结果是:%d 和 %d\n", a, b);    return 0;}


运行结果

运行结果解释

此程序可以实现两个值的交换,x,y前都有一个取地址符号&。有了这个,调用myswap时函数会将a,b 分别代替了x,y了,我们称x,y分别引用了a,b变量。这样函数里头操作的其实就是实参a,b本身了,也就是说函数里是可以直接修改到a,b的值了。

 

知识点总结

       在这三个程序中对C/C++语言中函数参数传递的三种方式(传值,传地址,引用)进行了进一步的巩固,理解实参与形参的关系。

学习心得

       三种方式看似简单,但其中的每一个代码都有其自己的意义,越是细节的地方越需要注意并加以理解,特别是形参与实参的关系,要清楚其中的隐含部分。

 

 

0 0
原创粉丝点击