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; } }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号