Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343014
  • 博文数量: 56
  • 博客积分: 2058
  • 博客等级: 中尉
  • 技术积分: 688
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-11 09:19
个人简介

code rush

文章分类

全部博文(56)

文章存档

2012年(2)

2011年(54)

分类: C/C++

2011-06-10 17:01:07

函数传值方法有三:

传值   
  是把实参的值赋值给行参   
  那么对行参的修改,不会影响实参的值   
    
传地址   
  是传值的一种特殊方式,只是他传递的是地址,不是普通的如int   
  那么传地址以后,实参和行参都指向同一个对象   
    
传引用   
  真正的以地址的方式传递参数,传递以后,行参和实参都是同一个对象,
  只是他们名字不同而已,对行参的修改将影响实参的值

-----------------------------------------------------------------
通俗的明细的一点说法来分辨三者区别:副本的境界 
传值:   
  函数参数压栈的是参数的副本。   
  任何的修改是在副本上作用,没有作用在原来的变量上。   
    
传指针:   
  压栈的是指针变量的副本。   
  当你对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。   
    
传引用 
  压栈的是引用的副本。由于引用是指向某个变量的,对引用的操作其实就是
  对他指向的变量的操作。(作用和传指针一样,只是引用少了解指针的草纸)  

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

引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量
在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。
被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问
主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了
主调函数中的实参变量。

---------------------------------------------------------------------------
通过传指针可以利用 强大的函数指针实现回调函数,实现用函数作为函数的参数。

异步调用就是回调函数的一种典型用法,调用者首先将回调函数传给实现者,实现
者记住这个函数,这称为注册一个回调函数,然后当某个事件发生时实现者再调用
先前注册的函数。

阅读(1906) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~