zoukankan      html  css  js  c++  java
  • C#中值传递和引用传递

    C#中对于值类型的变量,进行值传递和引用传递是好理解的。但是对于C#中对于引用类型变量进行的值传递一直不是很清楚。尽管有测试过C#对于引用类型变量进行值传递和引用传递的例子,结果当然是不同的。不过具体原理怎么也想不清楚。今天在网上看了一些资料,总算是弄明白了。
    归结起来,call-by-value方式的调用参数和被调用方法中的参数,是两个变量,代表两个不同的内存地址;而call-by-reference方式的调用参数和被调用方法中的参数,代表的是同一内存地址。从这个意义上理解两种参数传递方式,就是很容易的了。

     传值的过程:
    (1)形参与实参各占一个独立的存储空间。
    (2)形参的存储空间是函数被调用时才分配的。调用开始,系统为行参开辟一个临时存储区,然后将各实参之值传递给形参,这时形参就得到了实参的值。
    (3)函数返回时,临时存储区也被撤销。
        
        传值的特点:单向传递,即函数中对形参变量的操作不会影响到调用函数中的实参变量。
     
        地址传递过程:
    参数是地址,实参和形参共享一个存储单元(也可以理解将实参的地址赋值给形参),对形参的操作相应的就改变了实参,此时参数传递是双向的。
     
        利用引用类型变量进行值传递:传递是原引用变量的副本,即把原引用变量复制一份传递给方法,使得方法中的行参和实参引用的值相同,指向同一个对象的实例;引用类型变量是以对象引用的形式传递的,是将要传递的对象的引用复制给函数的形参,这时形参是实参引用的复制,注意:是引用的复制,而不是原引用,和原引用指向相同的对象,因此对于引用对象所做的更改将会直接影响原来的值,但是对于引用本身,在函数内的任何改变将不会影响原引用。
        利用引用类型参数进行引用传递:传递的是引用变量的引用,此时形参相当于是实参的一个别名,两者是同一个引用。
  • 相关阅读:
    树的直径
    Codeforces 734E Anton and Tree(缩点+树的直径)
    Codeforces 948D Perfect Security(字典树)
    Codeforces 954D Fight Against Traffic(BFS 最短路)
    Codeforces 954C Matrix Walk (思维)
    Codeforces 950D A Leapfrog in the Array (思维)
    Codeforces 946D
    Invitation Cards POJ-1511 (spfa)
    spfa 单源最短路究极算法
    Currency Exchange POJ
  • 原文地址:https://www.cnblogs.com/bdbw2012/p/3075475.html
Copyright © 2011-2022 走看看