它们的概念可以分为两种:
-
智能合约是怎么样存储数据的, 在memory里还是storage里存储
-
solidity变量怎么样存储数据的, 在memory里还是storage里
智能合约的数据存储:
- 以下面这段代码为例:
pragma solidity^0.4.17;
contract Funding{
Request[] public requests;
//请求的结构体struct
struct Request{
string name;
}
//内容返回到request[]数组中
function createRequest(string _name) public{
Request memory request = Request({
name:_name
});
requests.push(request);
}
Request[] public requests; 这个数组包含的内容就存到了storage里,也就是直接写到了所有的区块链账本里了
- storage : 它是成员变量. 能够跨函数调用(比如说在A函数里一个有requests,那就可以在B函数中把它取出来)
- memory: 是临时数据的存储, 它只能在当前的函数生效, 比如说在矿工挖矿的函数里有一个临时变量, 在矿工电脑上完成了计算, 挖矿成功后变量就消失了, 别的函数是拿不到这个临时变量的. 函数的参数可以理解为memory类型
solidity变量的数据存储
实验一:
pragma solidity^0.4.17;
contract test{
uint[]