solidity数据位置
solidity一般有三种类型,memory,storage,calldata,一般只有外部函数的参数(不包括返回参数)被强制指定为calldata,这种数据位置是只读的,不会持久化到区块链。
memory与storage
storage变量
永久存储在区块链中的变量,有点类似于全局变量是在在函数变量之外声明的变量,同时被称为状态变量;此变量默认为storage类型,将永久写入区块链能拿到的内容是引用/句柄/指针 memory变量
是临时的,当外部函数对合约调用完毕以后,memory变量就会被移除,类似于局部变量在函数内部声明的变量默认为memory类型,在函数调用结束后消失拿到的是一份拷贝
总结
强制指定的数据位置:
外部函数的参数(不包括返回参数):calldata,效果与memory差不多状态变量:storage
默认数据指定位置:
函数参数(包括返回参数):memory所有其他局部变量的存储方式
其他位置:
映射只能存储在storage中数组/结构体可以被声明为storage/memory