memory 值传递,临时变量,EVM内存中
storage 引用传递,指针,会改变原变量的值,区块链中
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract storage_demo {
struct User {
string name;
uint8 age;
}
User adminuser;
function setUser(string memory _name, uint8 _age) public {
adminuser.name = _name;
adminuser.age = _age;
}
function getUser() public view returns (User memory) {
return adminuser;
}
function setAge1(uint8 _age) public {
User memory user = adminuser; //改变不了adminuser
user.age = _age;
}
function setAge2(uint8 _age) public {
User storage user = adminuser; //可以改变adminuser
user.age = _age;
}
function setAge3(User storage _user, uint8 _age) internal {
_user.age = _age;
}
function callsetAge3(uint8 _age) public {
setAge3(adminuser, _age); //可以改变adminuser
}
}
RE: Solidity开发指南