Struct
contract Struct {
// 定义
struct Car {
string model;
uint year;
address owner;
}
Car[] public cars;
mapping(address => Cars[]) public userCars;
function demo() external {
// 初始化的三种方法
Car memory bmw = Car("BMW", 2020, msg.sender); // 必须与属性顺序一致
Car memory porsche = Car({year: 2022, model: "Porsche", address: msg.sender}); // 可以随意顺序
Car memory tesla;
tesla.model = "Tesla";
// ...
// memory: 复制 state 到内存, 所有修改操作不存储, 每次内部传参时都进行拷贝
Car memory firstCar = cars[0];
// storage: 所有操作会存回 state 保存
Car storage firstCar = cars[0];
// calldata: 在内部多个函数之间传参数组时使用, 该数组虽然是动态数组, 但是内容/长度不可变, 由于传参避免拷贝因而更节省 gas
// 恢复默认值
delete bmw.owner; // 属性重置
delete cars[0]; // 所有属性重置
}
}Last updated
Was this helpful?