如何理解合约中的引用类型(2)——Struct

结构(struct)

  • 结构如同contract和enum,用来自定义数据类型
  • 状态变量、局部变量、参数与返回值均可用结构
  • 结构可放在mapping和数组中,结构的成员可以是mapping或数组

注意看注释!

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.2 <0.9.0;

contract StructType{

    struct Person{
        string name;
        uint8 age;
        // Person bestFriend; // 不要这样递归搞事情!
    }

    Person master;
    //测试struct作为返回值
    function readPerson()public view returns(Person memory){
        
        return master;
    }
    //测试struct作为参数
    function writePerson(Person memory p)public{
        master = p;
    }
    function writePersonName(string memory name)public{
        master.name = name;
    }

    //测试内存struct.对struct来说,memory与storage并没有大的影响
    function testMemoryStruct()public pure returns(Person memory){
        //声明自带初始化!这是递归结构需要考虑的问题...
        Person memory p;//不用new操作,因为struct大小是确定的,不需要一个尺寸参数!
        //这一点跟new动态数组或者bytes、string不同
        p.name = "zhangsan";
        p.age = 25;
        
        return p;
    }


     //测试内存location为storage的局部变量
    function testStorageLocalStruct()public view returns(Person memory){
        Person storage p = master;
        //下面语句修改了master成员变量!
        // p.name = "zhangsan";
        //p.age = 25;
        
        return p;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值