zoukankan      html  css  js  c++  java
  • storage和memory

    memory:使用的是值传递,默认使用的是memory,传递的是值

    storage:引用传递,传过来的是指针,后面一定要加上internal,private

    pragma   solidity  ^0.4.4;
    contract Person {
      string   _name;
    
      //一个构造函数
      function Person(string  name) {
        _name=name;
      }
    
      function f() {
        modify(_name)
      }
    
      //如果是storage的话,指针传递,后面要加internal,或者是private类型,不能是public的类型,而且传进来的name长度是固定,不能直接给她赋值,可以修改这个name的某个值[0],[1]等吗
      //传进来的是指针name,下面修改的话是可以修改name的值的
      //我们传过来的形参默认是memory类型,这个memory类型分相当于是值传递,如果使用storage的话,相当于是使用的指针,指针的话是可以改变这个_name的值,并且执行name方法的时候,是可以看到这个_name改变之后的值
      function modify(string   storage  name) internal{
        bytes(name)[0]='L'//传过来的第0个修改成大写,只能修改这个值的某个,不能全部比如name="yunxin"是不可以的
    
      }
    
      //当执行f方法之前的话,如果传进的参会时是Li,执行f函数之后调用这个方法,那么这个首字母大写
      //那么之后的值是li,在调用name就可以返回这个值出来
      function   name() constant  returns (string) {
          return   _name;
      }
    }
    
    
    //当使用的是storage的时候,传进来的是name这个指针,而不是这个值

    memory就是值传递,如果形参是memory的时候,它是传递,不会修改原来的值,默认使用的是memory

    如果是storage类型的话,函数只能是internal,private,修改原来传过来的值,bytes(name)[1]='L'
    storage:如果使用这个的话,这所在的方法(function)在外部是看不见的,通过另一个函数才可以调用,引用传递

    pragma  solidity  ^0.4.13;
    
    contract  Test{
        string  public  _name;
        
        function  set(string   name) public{
            _name=name;
        }
        function  set1(string  a){
            modify(a);
        }
    
        function modify(string  b) internal{
            _name=b;//修改_name整个值,修改完之后调用get方法,_name,就会是修改好的值了
         
        }
        function  get()constant public returns(string){
            return  _name;
        }
        
    }
  • 相关阅读:
    Elkstack2.0部署
    ZABBIX自定义用户KEY与参数USERPARAMETERS监控脚本输出
    elasticsearch 管理工具
    指定时间开启、结束定时器
    异步的作用
    快速生成几百万条测试数据
    查看查询索引
    蠕虫复制
    导出数据库
    header
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10663412.html
Copyright © 2011-2022 走看看