首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

参数传递有关问题

2012-03-27 
参数传递问题?在看书的时候看到一个关于函数参数传递的问题,不是很懂,大家帮忙看一下。void f(int val,int

参数传递问题?
在看书的时候看到一个关于函数参数传递的问题,不是很懂,大家帮忙看一下。

  void f(int val,int &ref)

  val ++;
  ref ++;
}
而在调用时:
  int i=1;
  int =1;
  f(i,j);

为什么书上说j增量而i不增量?解释是第一个参数i是值传递,第二个参数j是引用传递。
不是很明白它解释的。

[解决办法]
i是按值传递的,传进去的只是i的一份拷贝,你在函数f()内对val的操作与i没有任何关系。
j是按引用传进去的,ref和j是同一个东西, 你对ref的操作就是对j的操作

[解决办法]
引用是对指针的隐藏或封装,它是已初始化内存地址中变量的另一个名字,通过它,你可以像操作该变量一样,操作那块内存地址区。引用可以看作更安全、方便的指针。
[解决办法]
第一个参数是传值,进入函数体后会生成一个临时的变量,然后把传进来的值赋给这个临时变量,在函数体内对第一个参数的操作就是对这个临时变量的操作。修改了临时变量的值,但是并没有修改第一个参数的值;

第二个是传引用,不会生成临时变量,在函数体内对第二个参数的操作就是直接作用在第二个参数上。并不是作用在什么临时变量上。
基于传引用不会生成临时变量,很多时候需要传“大参数”的时候(大指的的是参数所占内存空间大),都会采用传引用或者指针...

希望对你有所帮助。
[解决办法]
其实呢,按值传递的话,在函数调用时传入的参数,比如
int a = 5;
fuction(a);
这样的语句,会在传入时新建一个临时的变量,把a的值赋给这个临时的变量,然后就和a没什么关系了
所以,a的值一定不会改变。但是传引用的话,由于引用是内存变量的别名,这样的话相当于把a传入,这样
修改的就是a本身了。指针是把a的内存地址传入,修改这人内存了址里的值自然就是修改a的值了,都可以
对参数进行修改的。
[解决办法]
函数的第二个参数是引用
对于引用的参数,对引用对象的操作就是对实参(j)的操作,所以j会变
而第一个参数是按值传递方式、
对其进行操作只是对实参(i)的副本进行操作,实参(i)不会变
所以这就是引用参数和按值传递方式的最主要的区别
C++Primer 第3版本上讲的很清楚

热点排行