C#中值传递和引用传递
来源:互联网 发布:上海犀牛软件培训班 编辑:程序博客网 时间:2024/06/07 09:20
C#中对于值类型的变量,进行值传递和引用传递是好理解的。但是对于C#中对于引用类型变量进行的值传递一直不是很清楚。尽管有测试过C#对于引用类型变量进行值传递和引用传递的例子,结果当然是不同的。不过具体原理怎么也想不清楚。今天在网上看了一些资料,总算是弄明白了。
归结起来,call-by-value方式的调用参数和被调用方法中的参数,是两个变量,代表两个不同的内存地址;而call-by-reference方式的调用参数和被调用方法中的参数,代表的是同一内存地址。从这个意义上理解两种参数传递方式,就是很容易的了。
归结起来,call-by-value方式的调用参数和被调用方法中的参数,是两个变量,代表两个不同的内存地址;而call-by-reference方式的调用参数和被调用方法中的参数,代表的是同一内存地址。从这个意义上理解两种参数传递方式,就是很容易的了。
传值的过程:
(1)形参与实参各占一个独立的存储空间。
(2)形参的存储空间是函数被调用时才分配的。调用开始,系统为行参开辟一个临时存储区,然后将各实参之值传递给形参,这时形参就得到了实参的值。
(3)函数返回时,临时存储区也被撤销。
(1)形参与实参各占一个独立的存储空间。
(2)形参的存储空间是函数被调用时才分配的。调用开始,系统为行参开辟一个临时存储区,然后将各实参之值传递给形参,这时形参就得到了实参的值。
(3)函数返回时,临时存储区也被撤销。
传值的特点:单向传递,即函数中对形参变量的操作不会影响到调用函数中的实参变量。
地址传递过程:
参数是地址,实参和形参共享一个存储单元(也可以理解将实参的地址赋值给形参),对形参的操作相应的就改变了实参,此时参数传递是双向的。
利用引用类型变量进行值传递:传递是原引用变量的副本,即把原引用变量复制一份传递给方法,使得方法中的行参和实参引用的值相同,指向同一个对象的实例;引用类型变量是以对象引用的形式传递的,是将要传递的对象的引用复制给函数的形参,这时形参是实参引用的复制,注意:是引用的复制,而不是原引用,和原引用指向相同的对象,因此对于引用对象所做的更改将会直接影响原来的值,但是对于引用本身,在函数内的任何改变将不会影响原引用。
利用引用类型参数进行引用传递:传递的是引用变量的引用,此时形参相当于是实参的一个别名,两者是同一个引用。
利用引用类型参数进行引用传递:传递的是引用变量的引用,此时形参相当于是实参的一个别名,两者是同一个引用。
0 0
- C#中值传递和引用传递
- java中值传递 和 引用传递
- java中值传递和引用传递
- java中值传递和引用传递辨析
- Java中值传递和引用传递问题
- java中值传递和引用传递
- Java中值传递和引用传递
- java中值传递和引用传递
- java中值传递和引用传递
- Java中值传递和引用传递实例
- JavaScript中值传递和引用传递
- Java中值传递和引用传递
- java中值传递和引用传递
- Python中值传递和引用传递区别
- Python中值传递和引用传递区别
- C++中值传递、指针传递和引用传递的比较
- C++中值传递、指针传递和引用传递的比较
- C++中值传递、指针传递和引用传递的比较
- const参数,const返回值与const函数 .
- QT5框架
- k-medoids与k-Means聚类算法的异同
- vue2.0构建单页应用最佳实战
- C++中引用传递与指针传递区别
- C#中值传递和引用传递
- Java基础——length、length()、size()的区别
- Maven生命周期
- border-radius将div或者button变成圆形
- 断言的使用
- 推荐系统中TopN与kNN的区别
- 注解Annotation的IoC (@Autowired @Component )
- C++技巧之断言Assert
- 推荐系统介绍:(协同过滤)—Intro to Recommender Systems: Collaborative Filtering