Appearance
引用类型 
在 Solidity 中,数据有多种存储位置,包括内存、存储器和栈。下面是对这些存储位置的简要解释:
- 内存(memory):内存是临时变量的存储位置,只在函数执行期间存在,执行结束后会被清除。
- 存储器(storage):存储器是永久存储变量的地方,数据会一直保存在区块链上,直到合约被删除。同时,存储器的访问较慢,会消耗更多的gas,因此应该尽量减少存储在存储器中的数据量。
- 栈(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 会在存储器中查找其值,并返回结果。如果变量不存在,则会返回其类型的默认值。