RE: RE: Solidity开发指南
You are viewing a single comment's thread from:

RE: Solidity开发指南

Words
35
Reading
1 min
Listen
Play
4M

memory 值传递,临时变量,EVM内存中
storage 引用传递,指针,会改变原变量的值,区块链中

存储位置.jpg

// 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
    }
}