Solidity中用new初始化的状态变量数组存储位置疑问
问题解答:该数组存储在Storage中
你的疑问核心是混淆了「new创建数组的场景」和「变量本身的存储类型」,具体解释如下:
- 状态变量的存储位置是固定的:你代码里的
uint[] public array是合约的状态变量,Solidity规定状态变量默认且仅能存储在storage中——这是变量类型的属性,和初始化方式无关。 - 初始化时的
new uint[](3)只是临时赋值:这里的new uint[](3)确实会创建一个memory中的临时数组,但它的作用是给状态变量array提供初始值,合约部署完成后,这个临时memory数组会被销毁,真正持久化保存的是storage里的array。 - 对比函数内的场景:如果是在函数内部写
uint[] memory arr = new uint[](3),这个arr才是真正存储在memory中的临时数组,函数执行结束后就会被释放,不会持久化。
内容的提问来源于stack exchange,提问作者Huowuge
相关产品推荐
相关产品推荐

