ByRef 传接参数,为何传递的实参是表达式时.就变成了传值传递

ByRef 传递参数,为何传递的实参是表达式时.就变成了传值传递.
求大大解惑呀?感激不尽。
Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim a, b, c As Integer
        a = 1 : b = 2
        c = hanshu(a, b + 0) '地址传递不了表达式,于是变成传值传递.是什么原因
        TextBox1.AppendText(CStr(a))
        TextBox1.AppendText(CStr(b))
        TextBox1.AppendText(CStr(c))
    End Sub
    Private Function hanshu(ByVal x As Integer, ByRef y As Integer) As Integer
        x += 1
        y += 1
        Return x + y
    End Function
End Class
------最佳解决方案--------------------
当你传递b + 0的时候,编译器其实帮你创建了一个匿名的变量,将b + 0的结果算好,代入变量,将这个变量传给函数,所以修改的是这个你看不见的变量了。

再说,假如b+0还能按照b传的话,如果是hanshu(a, b + a),按照你的理解,怎么传呢?
------其他解决方案--------------------

非常感谢!

编译器创建了一个匿名的变量,这个变量的生命周期和形参一样吗?
调用hanshu的时候被创建,调用过后就释放?
------其他解决方案--------------------
引用:
当你传递b + 0的时候,编译器其实帮你创建了一个匿名的变量,将b + 0的结果算好,代入变量,将这个变量传给函数,所以修改的是这个你看不见的变量了。

再说,假如b+0还能按照b传的话,如果是hanshu(a, b + a),按照你的理解,怎么传呢?


非常感谢!
 
编译器创建了一个匿名的变量,这个变量的生命周期和形参一样吗?
调用hanshu的时候被创建,调用过后就释放? 
------其他解决方案--------------------
引用:
引用:当你传递b + 0的时候,编译器其实帮你创建了一个匿名的变量,将b + 0的结果算好,代入变量,将这个变量传给函数,所以修改的是这个你看不见的变量了。

再说,假如b+0还能按照b传的话,如果是hanshu(a, b + a),按照你的理解,怎么传呢?

非常感谢!
 
编译器创建了一个匿名的变量,这个变量的生命周期和形参……

当然。