- 译文出自:登链翻译计划
- 译者:翻译小组
- 校对:Tiny 熊
- 原文链接:learnblockchain.cn/article…
欢迎阅读
跟我学习 Solidity
系列中的另一篇文章。在上一篇文章,中,我们了解了数据位置的工作方式以及何时可以使用以下三个位置:
memory
,
storage
和
calldata
。
在本文中,我们将继续学习Solidity中的变量。这次,我们将重点放在引用类型上,该引用类型应显式指定数据位置,正如我们在前几篇文章中提到的那样。我们还将看到如何定义映射,枚举和常量。
数组(Arrays)
在Solidity中,我们有两种类型的数组:存储数组和内存数组。
存储数组(Storage arrays)
这些数组被声明为状态变量,并且可以具有固定长度或动态长度。
动态存储数组可以调整数组的大小,它们通过访问
push()
和
pop()
方法来调节长度。
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract A {
uint256[] public numbers;// 动态长度数组
address[10] private users; // 固定长度数组
uint8 users_count;
function addUser(address _user) external {
require(users_count < 10, "number of users is limited to 10");
users[users_count] = _user;
users_count++;
}
function addNumber(uint256 _number) external {
numbers.push(_number);
}
内存数组(Memory arrays)
这些数组以
memory
作为其数据位置声明。它们也可以具有固定长度或动态长度,但是不能调整动态大小的内存数组的大小(即,不能调用
push()
和
pop()
方法),数组的大小必须预先计算。
使用
new
关键字声明动态大小的内存数组,如下所示:
Type[] memory a = new Type[](size)
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract B {
function createMemArrays() external view {
uint256[20] memory numbers;
numbers[0] = 1;
numbers[
版权声明:本文为weixin_31677427原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。