温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

solidity智能合约[42]-memory与storage相互转换

发布时间:2020-06-11 00:47:34 阅读:585 作者:jonson_jackson 栏目:开发技术
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

memory 赋值 状态变量

下面的例子说明了memory赋值给storage的情况。在test函数中,memory空间的变量s复制给了状态变量stu。为值的拷贝问题。并且由于这两个空间互不影响。因此修改变量的值不会影响到另一个变量的值。
当调用call函数时,返回100,"jonson"。s的修改不会影响变量stu。

123456789101112131415161718192021222324
pragma solidity ^0.4.23;contract MemoryTostorage{      struct student{        uint grade;        string name;    }    student stu;    function test(student  memory s) internal{        stu = s;        s.name = "alice";    }    function call() returns(uint,string){        student memory guy = student(100,"jackson");        test(guy);        return (stu.grade,stu.name);    }}

storage 赋值 memory

如下例,说明了storage复制给结构体 memory变量的情况。在test函数中,其实质是将s引用的状态变量的值赋值给了guy。
变量guy不是存储的引用,而是一个结构体空间。当调用call函数时,返回100,"jonson"。对于guy的修改不会影响到stu的修改。

123456789101112131415161718192021
contract storageToMemory{      struct student{        uint grade;        string name;    }    student stu = student(100,"jackson");function test(student  storage s) internal{    student memory guy = s;    guy.grade = 50;}function call() public returns(uint,string){    test(stu);    return (stu.grade,stu.name);}

memory 转 memory

memory与memory之间的相互转换是值传递。
在下面的例子中,当调用call函数时,在memory中开辟了结构体的三个实例空间a、b、c。赋值为值的拷贝。他们之间互不影响。
修改一个变量不会影响其他变量的值。

1234567891011121314151617181920
pragma solidity ^0.4.23;contract memoryTomemory{    struct student{        uint grade;        string name;    }    function test(student memory b) internal{        student memory c = b;        c.name = "jonson";    }    function call() returns(string){        student memory a =  student(100,"olaya");        test(a);        return a.name;    }}
  • 本文链接: https://dreamerjonson.com/2018/11/23/solidity-42-memory-storage/

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!

solidity智能合约[42]-memory与storage相互转换

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×