Solidity中memory在0.5和0.4不同版本的区别

    xiaoxiao2022-07-14  194

    Solidity中memory在0.5和0.4不同版本用法有些区别, 0.5的string变量需要在传值的时候加上memory

    以下是0.4版本代码:

    pragma solidity ^0.4.4; contract a1 { string _name; function a1(string name) { _name = name; } function f() { setName(_name); } //memory是值传递,不会改变原来的值。 //这里引用类型也可以换成storage。当使用storage时方法必须是private或internal function setName(string memory name) private{ bytes(name)[0] = 'x'; } function name() constant returns(string){ return _name; } }

    以下是0.5版本代码:

    注意:string 后面必须加上memory,否则会直接报错,0.4版本可以不加

    pragma solidity ^0.5.1; contract a1 { string _name; constructor (string memory name) public { _name = name; } function f() public { setName(_name); } //memory是值传递,不会改变原来的值。 //这里引用类型也可以换成storage。当使用storage时方法必须是private或internal function setName(string storage name) private{ bytes(name)[0] = 'x'; } function name() public view returns(string memory){ return _name; } }
    最新回复(0)