11-Solidity8.0存储位置

Solidity8.0

11-Solidity8.0存储位置


在这里插入图片描述


前言

数据位置 - 存储、内存和调用数据
变量被声明为storage或memory以calldata显式指定数据的位置。

storage- 变量是状态变量(存储在区块链上)
memory- 变量在内存中,并且在调用函数时存在
calldata- 包含函数参数的特殊数据位置


一、Solidity8.0存储位置

1.存储位置

代码如下(示例):

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

contract DataLocations {
    
    
    uint[] public arr;
    mapping(uint => address) map;
    struct MyStruct {
    
    
        uint foo;
    }
    mapping(uint => MyStruct) myStructs;

    function func() public {
    
    
        _func(arr, map, myStructs[1]);

        MyStruct storage myStruct = myStructs[1];
        MyStruct memory myMemStruct = MyStruct(0);
    }

    function _func(
        uint[] storage _arr,
        mapping(uint => address) storage _map,
        MyStruct storage _myStruct
    ) internal {
    
    
        // do something with storage variables
    }

    // You can return memory variables
    function g(uint[] memory _arr) public returns (uint[] memory) {
    
    
        // do something with memory array
    }

    function h(uint[] calldata _arr) external {
    
    
        // do something with calldata array
    }
}


总结

日拱一卒。

猜你喜欢

转载自blog.csdn.net/yyjava/article/details/125289221