• 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;
        }
        
    }
  • 相关阅读:
    Node.js学习笔记(五) --- 使用Node.js搭建Web服务器
    express常用中间件
    MongoDb 学习笔记(一) --- MongoDb 数据库介绍、安装、使用
    如何优化网站加载时间
    Node.js学习笔记(四) --- fs模块的使用
    dns-prefetch使用整理
    puppeteer 中国区的使用
    mysql 定时任务和存储过程
    疯狂使用 leancloud (投稿文章)
    elasticsearch
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10663412.html
Copyright © 2020-2023  润新知