solidity 中的memory 和storage,局部变量和状态变量 之间值的传递

状态变量和局部变量:

1,在合约中定义的变量为状态变量,在方法中定义的变量为局部变量;

2,状态变量都是存储在区块链中的,局部变量都是存在内存中的,局部变量出了作用域就等待被回收。

memory和storage:

1,在合约中声明的变量默认是storage的

2,方法参数中的变量默认是memory的,方法中定义的变量默认是临时storage的(其实只是storage的引用且只能是复杂类型的数据(如 string,array和struct)),方法中定义的值类型变量默认是memor的 。

例如:

contract MemeryAndStorage{

    struct Anime{

        string name;

        uint age;

    }


    Anime public an = Anime("da bai",2);

    function anmi(){

        modifyAn(an);

    }

    function modifyAn(Animer storage _an) private {

        Animer bn = _an;

    }

}

上面 bn 就是一个storage的引用,指向an.如果方法参数是storage的那么该方法一定要是private的修饰的。不然会报错

memory->memory 是值copy一份。

memory->storage 是将memory的值copy一份存到storage中。

storage->storage 是引用copy一份,然后都指向同一个storage值。

storage->memory是值copy一份到memory

你可能感兴趣的:(solidity 中的memory 和storage,局部变量和状态变量 之间值的传递)