Skip to main content

结构体

结构体是可以将几个变量分组的自定义类型,定义了一个结构体以后,就变成了一种结构体类型

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

contract Structs {
struct Car {
string model;
uint year;
address owner;
}

Car public car;
Car[] public cars;
mapping(address => Car[]) public carsByOwner;

function options() 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);
cars.push(lambo);
cars.push(tesla);

// 数组推入时赋值
cars.push(Car("Ferrari",2020,msg.sender));

// 内存中获取car的值,不会改变结构体的值
Car memory _toyota = cars[0];
_toyota.model = "TestToyota";

// 存储中获取car的值,可以直接改变结构体的值
Car storage _tesla = cars[2];
_tesla.year = 1990;

// 删除对应元素,恢复成默认值
delete _tesla.owner; // 恢复成0地址
// 删除整个结体,恢复结构体的所有值为默认值
delete cars[1];
}
}