华为机试 小结 关于函数传参修改的问题

第一第二道题比较简单,第三道题还好,就是一个递归,但是传参的时候出了个问题,我做了一个flag来标志,但是函数中修改了flag之后,但是退出函数之后,flag并没有改变,想起来,应该是没有传入指针,故此处进行学习。

http://blog.csdn.net/herecles/article/details/6072523

在C++中,如果函数的实参的类型是数据类型比较大的数据类型,这是如果使用一般传参就会有很大的不方便,这是如果能够传递一个地址或者是对原来参数的一个引用对提高性能会有很大的帮助。

本文研究一下引用传参和指针传参的区别和联系。其实引用传参和指针传参都能够在条用函数内部对源数据进行修改,这是它们的共同点,但是它们也是有区别的。下面是一个例子:

[cpp] view plain copy

  1. #include <iostream>
  2. using namespace std;
  3. void SwapByPoint(int* x,int* y);      //指针传参函数的声明
  4. void SwapByReference(int &x,int &y);   //引用传参函数的声明
  5. int main()
  6. {
  7. int x = 3;
  8. int y = 5;
  9. cout<<"转化前: x="<<x<<" y="<<y<<"/n";
  10. SwapByPoint(&x,&y);    //如果这里使用 SwapByPoint(x,y) 则报错:cannot convert parameter 1 from ‘int‘ to ‘int *‘
  11. cout<<"指针传参转换后:x="<<x<<" y="<<y<<"/n";
  12. SwapByReference(x,y); //如果这里用SwapByReference(&x,&y) 则报错 cannot convert parameter 1 from ‘int *‘ to ‘int &‘
  13. cout<<"引用传参调用转换后:x="<<x<<" y="<<y<<"/n";
  14. system("pause");
  15. return 0;
  16. }
  17. /*交换函数 使用指针传参*/
  18. void SwapByPoint(int *x,int *y)
  19. {
  20. int temp = *x;
  21. *x = *y;
  22. *y = temp;
  23. }
  24. /*
  25. 使用引用传参
  26. */
  27. void SwapByReference(int &x,int &y)
  28. {
  29. int temp = x;
  30. x = y;
  31. y = temp;
  32. }

指针传参和引用传参的效果是一样的。

它们的差别个人认为:

  • 指针传参传递的是一参数(这里是Int实参)的地址,这样,虽然实参和形参不一样,但是它们只想的地址是一样的,所以对相同地址的数的操作会影响到原来的数。
  • 引用传参传递的是一个参数本身,但是在调用函数中,把保存它们的地址的值做了交换。

两种传参方式的调用必须是上述这样的,否则会报错,在相应的代码中有提示…..

时间: 2024-08-14 18:14:41

华为机试 小结 关于函数传参修改的问题的相关文章

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

华为机试—介绍、剖析、建议

一.华为机试介绍 1.大致介绍 时间:120分钟 环境:Visual Studio(去年是vs2005).Visual C++.VC 6.0.Eclipse(Java) 题量:共3题 初级题--60分--3组测试数据 中级题--100分--5组测试数据 高级题--160分--8组测试数据 注:初级题和中级题为必答题,高级题为附加题. 提交次数:每题最多5次 评判方式:按通过测试数据组数给分,每通过一组得20分 2.考试说明 这里有一个老版的机试考试说明,供大家参考: C/C++,JAVA机试流程

华为机试(5)

中级题  题目描述  你有一个容量为100的箩筐,给你30个物品,每个物品的体积已知问:最多能装多少个物品进箩筐  输入描述  :一行30个正整数,用空格隔开,表示每个物品的体积  输出描述  :一个数字,为最多能装下的物品数 输入样例(此处用3个物品作为样例,实际读入为30个)  :5 59 100  输出样例  :2 解题思路:利用性价比对所有物品进行排序,优先装性价比高的,在此题中,性价比就是物品的体积 #include<algorithm>//sort函数 #include<io

华为机试(4)

中级题  题目描述  输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序.     输入描述 :10个正整数,保证都在int范围内,用空格隔开   输出描述  :10个数字,其从大到小的值,用空格隔开,最后一个数字后不加空格  输入样例 :11 3 2 4 5 9 8 7 10 6  输出样例  :10 2 11 3 4 5 6 7 8 9  解题思路:调用C++自带的sort函数,重新改写compare函数即可. #include<string> #include&l

2014年6月6日--华为机试

准备了还有一段时间了,结果还是悲剧了,主要准备的是算法,结果华为机试更看重字符串的操作,这一块正好是自己的弱项,哎.不过还有时间,这几个月多刷刷题,多锻炼锻炼,加油吧. 机试一共考了三道题,两道简单点的,一道难题,难题考得是状态机,不知道是什么东西╮(╯▽╰)╭,简单的两题做的也不好,回来在重新做一下.   1.倒置英文句子中单词的字母顺序. hello, I am good.  ->  olleh, I ma doog. 这题其实不难,当时脑子有点纠结符号,所以没做出来,还有一点客观原因,平时

[华为机试真题]66.单词搜索

题目 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include

关于函数传参--传指针,传引用

今天和同学讨论到指针和引用的传递问题,有些想法从推理上讲是正确的,但是因为是推理,说出自己观点的时候不是那么有底气,本着实践是检验真理的唯一标准的原则,在电脑上敲了几段代码,验证了推理的正确性. 先上代码,再分析. 代码1: void Swap0(int a1,int b1){ int temp; temp=a1; a1=b1; b1=temp; } void Swap1(int *a1,int *b1){ //交换地址 int *temp; temp=a1; a1=b1; b1=a1; } v

华为机试正式版(西安c/c++/java),今天下午去机试的题目,新鲜出炉了!

以下题目都是回忆的,题目都很简单, 大家有些基础就可以参加!(语言可以是c/c++,也可以是java的) 题目一(60分): 字符串操作, 将小写转换成大写, 将大写转化为小写, 数字的不做转换 例如, 输入:aBcD12 输出:AbCd12 题目二(100分): 将输入的字符串按照规定重新排序,如果字符串长度为奇数, 则中间的字符保持不变, 中间字符左侧降序排列, 右侧字符按照升序排列, 如果字符串长度为偶数,则左半侧字符降序排列,右半侧字符则按照升序排列 例如, 输入:ab5de 输出:ba

python函数传参是传值还是传引用?

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-