函数的形参传递方式:值传递,指针传递,引用传递的区别


  1. C++从概念上来说一下这几种函数传参方式及区别:
  
 1、值传递:形参是实参的拷贝,改变函数形参的值并不会影响外部实参的值,这是最常用的一种传参方法,也是最简单的一种传参方法,只需要传递参数,返回值那是return考虑的;
  
 2、指 针传递:指针传递参数从本质上来说也是值传递,它传递的是一个地址。【值传递过程中,被调函数的形参作为被调函数的局部变量来处理,即在函数内的栈中开辟内存空间以存放由主调函数放进来的实参的值,从而成了实参的一个副本(记住这个,函数内的参数是实参的副本,变量存储的是地址值)】。由于指针传递的是外部实参的地址,当被调函数的形参值发生改变时,自然外部实参值也发生改变。
   
3、引用传递:被调函数的形参虽然也作为局部变量在栈中开辟了内存空间,但是栈中存放的是由主调函数放进的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中实参变量(实参和形参通过引用,合二为一,说白点就是:一个人,有两个名字那种;后面想会详细说)。因此,形参的任何改动都会直接影响到实参。

4.引用即“别名”,引用有自己的物理内存地址,该地址中存放的是所引用变量的内存,编译器对引用操作自动会添加取引用操作(*b);用反汇编查看地址时,需要注意编译器的内存地址对其方式,这会影响到对地址的操作。

2. Java形参实参传递问题

三句话总结一下:

1.对象就是传引用

2.原始类型就是传值

3.String等immutable类型因为没有提供自身修改的函数,每次操作都是新生成一个对象,所以要特殊对待。可以认为是传值。

其他参考文章:

http://www-128.ibm.com/developerworks/cn/java/l-jpointer/index.html

http://dreamhead.blogbus.com/logs/2005/05/1189478.html

http://www.javaeye.com/topic/12961

3.

引用和指针的一些区别如下:

1. 可以先创建指针,然后再指向一个目标。而引用在创建的时候就必须指定目标。总得现有这个人,然后这个人才有昵称吧。

2. 相对于引用来说,指针非常自由,指针可以指向一个目标也可以指向NULL。但是却不能有NULL引用。这不仅违背了引用的设计初衷,而且逻辑上也说不过去。一个事物本身就不存在了,哪来的昵称?就算能有昵称的话,那它本来的名字叫什么?

3. 一旦为一个变量设立引用以后,这个引用就和这个变量绑定了。换句话说,就是这个引用就不能指向别的变量上。所以引用就相当于变量的属性。试想,给一个人取了绰号以后,总不可能用这个绰号去称呼另一个人吧?如果是这样的话,那么肯定有很多人搞不清楚到底谁叫这个绰号,系统也是。所以当然就不行了。


转自:http://blog.csdn.net/hactrox/article/details/38974639



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值