zoukankan      html  css  js  c++  java
  • ethereum(以太坊)(四)--值传递与引用传递

    contract Person {
    
        string public  _name;
    
        function Person() {
            _name = "liyuechun";
        }
    
        function f() {
    
            modifyName(_name);
        }
    
        /*storage(指针传递)
        当函数参数为memory类型时,相当于值传递,而storage类型的函数参数将是指针传递。
    
        如果想要在modifyName函数中通过传递过来的指针修改_name的值,那么必须将函数参数的类型显示设置为storage类型,storage类型拷贝的不是值,而是_name指针,
        当调用modifyName(_name)函数时,相当于同时有_name,name,name1三个指针同时指向同一个对象,
        我们可以通过三个指针中的任何一个指针修改他们共同指向的内容的值。
        引用传递,改变了_name的值'Liyuechun'
        function modifyName(string storage name) internal {
    
            var name1 = name; //var直接将name的状态类型赋值给name1(string) var i=0 == uint8 i =0
            bytes(name1)[0] = 'L';
        }
        
        任何函数参数当它的类型为引用类型时,这个函数参数都默认为memory类型,memory类型的变量会临时拷贝一份值存储到内存中,
        当我们将这个参数值赋给一个新的变量,并尝试去修改这个新的变量的值时,最原始的变量的值并不会发生变化
        值传递,_name "liyuechun" 未改变
        */
        function modifyName(string memory name) public {
    
            var name1 = name;
            bytes(name1)[0] = 'L';
        }
    }
    值类型(Value Type)
        布尔(bool)
        整型(integer)
        地址(address)
        定长字节数组(fixed byte arrays)
        有理数和整型(Rational and Integer,String literals)
        枚举类型(Enums)
        函数(Functions Types)
    
        值类型传递时,会临时拷贝一份内容出来,而不是拷贝指针,当你修改新的变量时,不会影响原来的变量的值 
    
    引用类型(Reference Types)
        不定长字节数组(bytes)
        字符串(string)
        数组(Array)
        结构体(Struts)
        
        引用类型,赋值时,可以值传递,也可以引用(地址传递)
            值传递:      当你修改新的变量时,不会影响原来的变量的值 
            引用传递:    当你修改新变量时,原来变量的值会跟着变化,这是因为新/旧变量指向同一个地址的原因。
  • 相关阅读:
    今天玩wow的时候遇到的事,汗!
    EF4.0数据DateTime2数据类型错误
    在64位windows server 2003的IIS6上运行32位的.NET程序
    CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\.。。”“拒绝访问
    [转]网银支付接口编程资料汇总
    [转]Asp.Net MVC之ViewData字典与ViewModel模式
    MVC3小技巧
    MVC3+Spring.net+NHibernate+ExtJs的简单架构
    我的程序之路 asp.net 接触二年,工作一年总结 (2) lcs
    ASPXspy2.aspx lcs
  • 原文地址:https://www.cnblogs.com/eilinge/p/9952381.html
Copyright © 2011-2022 走看看