Skip to content

引用类型

Solidity 中,数据有多种存储位置,包括内存、存储器和栈。下面是对这些存储位置的简要解释:

  1. 内存(memory):内存是临时变量的存储位置,只在函数执行期间存在,执行结束后会被清除。
  2. 存储器(storage):存储器是永久存储变量的地方,数据会一直保存在区块链上,直到合约被删除。同时,存储器的访问较慢,会消耗更多的 gas ,因此应该尽量减少存储在存储器中的数据量。
  3. 栈(stack):存储特定函数执行期间的临时变量。

示例

下面是一个 Solidity 程序的示例,演示了在存储器中存储一个字符串的过程:

solidity
pragma solidity ^0.8.0;

contract StorageExample {
    string private name; // 存储器变量名为name

    function setName(string memory _name) public {
        name = _name; // 将字符串存储在存储器中
    }
    
    function getName() public view returns (string memory) {
        return name; // 从存储器中读取字符串
    }
}

在这个合约中,我们建立了一个名为 StorageExample 的合约,其中包含一个存储器变量名为 name

setName 函数用于将传入的字符串变量存储在存储器中,getName 函数用于从存储器中读取字符串并返回结果。

在函数中,我们使用字符串变量类型的内存来传递函数参数,并使用 string memory 作为函数返回类型,以从存储器中获取字符串。

需要注意的是,在 Solidity 中,存储器变量的初始值为其类型的默认值(例如,一个未初始化的 string 类型变量值为空字符串)。

在存储器中访问变量时,Solidity 会在存储器中查找其值,并返回结果。如果变量不存在,则会返回其类型的默认值。