第二周项目1函数参数传递的三种方式
2015-09-07 16:22
309 查看
问题及代码:
知识点总结:
第一种传值法
函数在调用时是隐含地把实参a、b 的值分别赋值给了x、y,之后在myswap函数体内再也没有对a、b进行任何的操作了。交换的只是x、y变量。并不是a、b。当然a、b的值没有改变啦!函数只是把a、b的值通过赋值传递给了x、y,函数里头操作的只是x、y的值并不是a、b的值。
第二种传地址法
将a的地址(&a)代入到p1,b的地址(&b)代入到p2。同上面的值传递一样,函数调用时作了两个隐含的操作:将&a,&b的值赋值给了px、py,而不是传递的a、b的内容对*px、*py的操作当然也就是对a、b变量本身的操作了。所以函数里头的交换就是对a、b值的交换了。
第三种引用做形参
参数x、y是int的变量,调用时我们可以像值传递一样调用函数。但是x、y前都有一个取地址符号“&”。有了这个,调用myswap时函数会将a、b 分别代替了x、y了,x、y分别引用了a、b变量。这样函数里头操作的其实就是实参a、b本身了,也就是说函数里是可以直接修改到a、b的值了。
学习心得:
认真研究,会有成就感!学习也有魅力!
/* Copyright(c) 2015,烟台大学计算机学院 All rights reserved. 文件名称:text.cpp 作者:李涵睿 完成日期:2015年9月7日 问题描述:输入两整形变量,将其交换 输入描述:两个整数 程序输出:交换后的两整数 */ #include <stdio.h> void myswap(int x,int y) { int t; t=x; x=y; y=t; printf("x = %d, y = %d\n", x, y); } int main() { int a,b; printf("请输入待交换的整数:"); scanf("%d%d",&a,&b); myswap(a, b); printf("调用后的结果是:a = %d和b = %d\n", a, b); return 0; }
运行结果:
<img src="https://img-blog.csdn.net/20150907194710940?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="620" height="235" alt="" />
#include <stdio.h> void myswap(int *p1,int *p2) { int t; t=*p1; *p1=*p2; *p2=t; printf("*p1 = %d, *p2 = %d\n", *p1, *p2); } int main() { int a,b; printf("请输入待交换的整数:"); scanf("%d%d",&a,&b); myswap(&a, &b); printf("调用后的结果是:a = %d和b = %d\n", a, b); return 0; }
#include <stdio.h> void myswap(int &x,int &y) { int t; t=x; x=y; y=t; printf("x = %d, y= %d\n", x, y); } int main() { int a,b; printf("请输入待交换的整数:"); scanf("%d%d",&a,&b); myswap(a, b); printf("调用后的结果是:a = %d和b = %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的值。
第二种传地址法
将a的地址(&a)代入到p1,b的地址(&b)代入到p2。同上面的值传递一样,函数调用时作了两个隐含的操作:将&a,&b的值赋值给了px、py,而不是传递的a、b的内容对*px、*py的操作当然也就是对a、b变量本身的操作了。所以函数里头的交换就是对a、b值的交换了。
第三种引用做形参
参数x、y是int的变量,调用时我们可以像值传递一样调用函数。但是x、y前都有一个取地址符号“&”。有了这个,调用myswap时函数会将a、b 分别代替了x、y了,x、y分别引用了a、b变量。这样函数里头操作的其实就是实参a、b本身了,也就是说函数里是可以直接修改到a、b的值了。
学习心得:
认真研究,会有成就感!学习也有魅力!
相关文章推荐
- 什么是a4j
- netty 解读
- 使用Javah命令生成头文件
- Git Git命令速查 | Git命令分类 | Git常见问题
- android 玩转ContentProvider之一--实现ContentProvider操作数据库
- poj1182 带权并查集
- Android沉浸式状态栏
- iOS开发最佳实践总结
- 第一篇博客,仅仅是为了看看自己能坚持多久
- git的使用笔记-转自廖前辈的网站
- linux下C/C++编译时系统搜索 include 和 链接库 文件路径的指定
- Python---tkinter之Text()
- objective-c中的协议和类别
- PHP 数字转汉字函数
- 100行代码实现现代版Router
- iOS开发-修改UITableViewCell中image和title的位置和大小
- JQuery上传插件Uploadify使用详解
- [Leetcode]Missing Ranges
- 解决Linux MySQL报错ERROR 2002 (HY000)
- p12证书转keystore签名