Skip to content

存储位置

Solidity 中,有两种类型的存储位置:存储器(memory)和状态变量(storage)。

存储器(memory)是临时存储位置,数据在函数调用结束后被销毁。

这种存储位置通常用于函数调用时需要暂时保存数据的情况,例如,将函数参数复制到存储器中以备用。

状态变量(storage)是永久性存储位置,数据会一直保存在区块链上。

这种存储位置通常用于存储合约中的数据和状态信息。在 Solidity 中,状态变量可以在合约级别声明,也可以在函数级别声明。

示例

下面是一个使用 Solidity 存储器和状态变量的示例:

solidity
pragma solidity ^0.8.0;

contract StorageExample {
    uint[] data;  // 状态变量

    function addData(uint[] memory _data) public {
        for (uint i = 0; i < _data.length; i++) {
            data.push(_data[i]);  // 调用状态变量存储数据
        }
    }

    function getData() public view returns (uint[] memory) {
        return data;  // 返回状态变量的数据
    }

    function sumData(uint[] memory _data) public pure returns (uint) {
        uint sum = 0;
        for (uint i = 0; i < _data.length; i++) {
            sum += _data[i];  // 存储器暂存数据,不影响状态变量
        }
        return sum;
    }
}

在这个示例中,我们创建了一个名为 StorageExample 的合约。

我们在合约级别声明了一个 uint 类型的数组数据 data,它是一个状态变量。

addData 函数接受一个 uint 数组作为参数,使用 for 循环将参数中的每个元素添加到 data 数组中。

getData 函数返回 data 数组。sumData 函数接受 uint 数组作为参数,使用存储器变量暂时存储数据,计算总和并返回。