Solidity0.8.0-结构体

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.3;

contract Structs {//结构体是能够将多种变量格式打包一起的数据格式,以一种类型的形式存在
    struct Car {
        string model;//默认值字符串
        uint year;//默认值0
        address owner;//默认值 0地址
    }
  //以下三种都是声明状态变量方法,会记录在链上
    Car public car;//结构体是大写字母开头,变量是小写字幕开头
    Car[] public cars;
    mapping(address => Car[]) public carsByOwner;//结构体类型定义一个映射,代表一个人可能拥有许多辆汽车,

    function examples() external {//函数中声明局部变量,运行在内存中;合约/方法调用完后就消失
        Car memory toyota = Car("Toyota", 1990, msg.sender);//向结构体传入数据的写法,,必须按照顺序
        Car memory lambo = Car({year: 1980, model: "Lamborghini", owner: msg.sender});//定义了名称就可以调转顺序去定义值
        Car memory tesla;//
        tesla.model = "Tesla";
        tesla.year = 2010;
        tesla.owner = msg.sender;

        cars.push(toyota);//数组方法push变量推入到结构体
        cars.push(lambo);
        cars.push(tesla);

        cars.push(Car("Ferrari", 2020, msg.sender));//推入定义一步完成,同样是在内存中建立的结构体,推入数组中,推入后进入到一个状态变量中而不是局部变量

        //Car memory _car = cars[0];//获取结构体的值,要将变量装入到内存中,内存中不能修改删除
        Car storage _car = cars[0];//定义在存储中就可以对结构体的值进行增删改查,存储就是把状态变量读取出来,且带有指针式的读取
     _car.year
= 1999; delete _car.owner; delete cars[1];//索引为1的结构体三个变量的值就会变为默认值 } }

 

posted @ 2022-07-29 16:01  ZaleSwfit  阅读(101)  评论(0编辑  收藏  举报