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;
    }
    
}

 

转载于:https://www.cnblogs.com/yunxintryyoubest/p/10663412.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值