第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Solidity学习过程:storage与memory

Solidity学习过程:storage与memory

时间:2024-02-05 22:54:35

相关推荐

Solidity学习过程:storage与memory

pragma solidity >=0.5.0;contract memoryTest{uint[] arrx;//这个状态变量存储在区块链网络上//会为arry在内存中分配空间function test(uint[] memory arry) public returns(uint){arrx = arry;//将内存中的arry拷贝到区块链的arrx上//当我们在函数体内部定义了一个可变长度的数组时,实际上,它默认的类型是storage类型,指向 //arrx,所以修改Z元素的时候,实际上是在操作arrxuint[] storage Z = arrx;Z[0] = 100;// Z.length = 100;}function test2() public returns(uint){return arrx[0];}function test3() public returns(uint){return arrx.length;}}

结构体

pragma solidity >=0.5.0;contract structTest{//结构体定义struct student{uint grade;string name;}//结构体不可以包含自己本身,但可以是动态长度数组,也可以是映射struct student2{student2[] stu;mapping(uint=>student2) stud;}//结构体初始化方式function init()public view returns(uint,string memory){student memory s = student(100,"tck");return(s.grade,s.name);}//结构体初始化第二种方式function init2()public view returns(uint,string memory){student memory s = student({grade:100 ,name:"tck"});return(s.grade,s.name);}}

结构体中的mapping

pragma solidity >=0.5.0;contract structTest{//struct student{uint grade;string name;}struct student2{student2[] stu;mapping(uint=>string) map;}function init()public view returns(uint,string memory){//在初始化结构体的时候,忽略掉这样的mapping类型student memory s = student(100,"tck");// s.map[0] = "hello"不能用memory操作结构体中d操作结构体中的mapping return(s.grade,s.name);}}

结构体作为函数参数

pragma solidity >=0.5.0;contract structTest{struct student{uint grade;string name;}//function test(student memory s) internal {// student stu = s;stu默认是storage类型,不能用memory类型的s赋值给stu} }

storage转storage

pragma solidity >=0.5.0;contract structTest{struct Student{uint grade;string name;}Student student;//function getstudent(Student storage s) internal returns(Student memory){Student storage stu1 = s;stu1.name = "tck";return stu1;} function call() public returns(string memory){return getstudent(student).name;}}

memory转storage

pragma solidity >=0.5.0;contract structTest{struct Student{uint grade;string name;}Student stu;//函数形参内存中开辟空间function test(Student memory s) internal{//把s的值赋给区块链上的stustu = s;//修改函数形参的s,只是修改了其内存中的空间,没有修改区块链上的,两个完全独立s.name = "tck";}function call() public returns (string memory){//内存中开辟空间Student memory temp = Student(100,"tck");test(temp);return stu.name;}}

storage转memory

pragma solidity >=0.5.0;contract structTest{struct Student{uint grade;string name;}Student stu = Student(100,"stu");//s是一个形参function test(Student storage s) internal{//tck是内存中的副本,把s引用的stu的内容拷贝给了内存中tck对象Student memory tck = s;//修改tck的值不会修改stu的值tck.name = "tangcongke";}function call() public returns (string memory){test(stu);return stu.name;}}

memory转memory

pragma solidity >=0.5.0;contract structTest{struct Student{uint grade;string name;}function test(Student memory s) internal{Student memory wong = s;wong.name = "wonghui";}function call() public returns (string memory){Student memory tck = Student(100,"tck");test(tck);return tck.name;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。