Appearance
存储位置
在 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 数组作为参数,使用存储器变量暂时存储数据,计算总和并返回。