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