memory 赋值 状态变量
下面的例子说明了memory赋值给storage的情况。在test函数中,memory空间的变量s复制给了状态变量stu。为值的拷贝问题。并且由于这两个空间互不影响。因此修改变量的值不会影响到另一个变量的值。
当调用call函数时,返回100,"jonson"
。s的修改不会影响变量stu。
在孝昌等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供
网站设计制作、网站设计 网站设计制作按需定制开发,公司网站建设,企业网站建设,
品牌网站设计,
全网整合营销推广,
成都外贸网站制作,孝昌网站建设费用合理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 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的修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 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。赋值为值的拷贝。他们之间互不影响。
修改一个变量不会影响其他变量的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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; } }
|
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
文章标题:solidity智能合约[42]-memory与storage相互转换-创新互联
分享链接:
http://bjjierui.cn/article/johdc.html