Solidity中的引用类型
引用类型(Reference Type)包含:数组(array)、结构体(struct)、映射(mapping),这种类型变量占用空间较大,赋值时直接传递地址(类似C语言的指针)。由于该类型比较复杂,因此我们使用时必须声明数据存储的位置。
数据的位置
Solidity的数据存储位置有三类:storage、memory、calldata。不同的存储位置的gas fee不同。
storage:合约的状态变量一般都默认是storage,存储在链上,类似存储在计算机的硬盘,因此消耗gas fee较高。
memory:函数里的参数和临时变量一般使用memory,存储在内存,不上链。
calldata:与memory类似,不同点是calldata声明的变量不能进行修改,一般用于函数的参数。
数据位置和赋值规则
在不同的存储类型相互赋值时,有时会产生独立的的副本(修改新变量不会影响原变量),有时会