- Solidity 教程
- Solidity - 主页
- Solidity - 概述
- Solidity - 环境设置
- Solidity - 基本语法
- Solidity - 首次应用
- Solidity - 评论
- 坚固性 - 类型
- Solidity - 变量
- Solidity - 可变范围
- Solidity - 运算符
- 坚固性 - 循环
- Solidity - 决策
- 坚固性 - 弦乐
- Solidity - 数组
- Solidity - 枚举
- Solidity - 结构
- Solidity - 映射
- 坚固性 - 转换
- Solidity - 以太币单位
- Solidity - 特殊变量
- Solidity - 风格指南
- 实体函数
- Solidity - 函数
- Solidity - 函数修饰符
- Solidity - 查看函数
- Solidity - 纯函数
- Solidity - 后备函数
- 函数重载
- 数学函数
- 加密函数
- Solidity 常见模式
- Solidity - 提款模式
- Solidity - 限制访问
- 坚固进阶
- Solidity - 合约
- 坚固性——继承
- Solidity - 构造函数
- Solidity - 抽象合约
- Solidity - 接口
- Solidity - 库
- 坚固性 - 装配
- Solidity - 活动
- Solidity - 错误处理
- Solidity 有用资源
- Solidity - 快速指南
- Solidity - 有用的资源
- 坚固性 - 讨论
Solidity - 数组
数组是一种数据结构,它存储相同类型元素的固定大小的顺序集合。数组用于存储数据的集合,但将数组视为相同类型的变量的集合通常更有用。
您可以声明一个数组变量(例如numbers)并使用numbers[0]、numbers[1]和...、numbers[99]来表示,而不是声明单个变量(例如number0、number1、...和number99)个体变量。数组中的特定元素通过索引来访问。
在 Solidity 中,数组可以是编译时固定大小或动态大小。对于存储数组来说,它也可以有不同类型的元素。对于内存数组,元素类型不能映射,如果要用作函数参数,则元素类型应该是 ABI 类型。
所有数组都由连续的内存位置组成。最低地址对应于第一个元素,最高地址对应于最后一个元素。
声明数组
要在 Solidity 中声明固定大小的数组,程序员需要指定数组所需的元素类型和元素数量,如下所示 -
type arrayName [ arraySize ];
这称为一维数组。arraySize必须是大于零的整数常量,类型可以是任何有效的 Solidity 数据类型。例如,要声明一个名为 Balance 的 uint 类型的 10 元素数组,请使用以下语句 -
uint balance[10];
要在 Solidity 中声明动态大小的数组,程序员指定元素的类型,如下所示 -
type[] arrayName;
初始化数组
您可以逐一初始化 Solidity 数组元素或使用单个语句,如下所示 -
uint balance[3] = [1, 2, 3];
大括号 [ ] 之间的值的数量不能大于我们为方括号 [ ] 之间的数组声明的元素数量。以下是分配数组的单个元素的示例 -
如果省略数组的大小,则会创建一个足以容纳初始化的数组。因此,如果你写 -
uint balance[] = [1, 2, 3];
您将创建与上一个示例中完全相同的数组。
balance[2] = 5;
上述语句将数组中第 3个元素的值指定为 5。
创建动态内存数组
动态内存数组是使用 new 关键字创建的。
uint size = 3; uint balance[] = new uint[](size);
访问数组元素
通过索引数组名称来访问元素。这是通过将元素的索引放在数组名称后面的方括号内来完成的。例如 -
uint salary = balance[2];
上面的语句将从数组中取出第三个元素并将值分配给工资变量。以下是一个示例,它将使用所有上述三个概念,即。声明、赋值和访问数组 -
会员
length - length 返回数组的大小。length 可用于通过设置来更改动态数组的大小。
Push - Push 允许将一个元素追加到动态存储数组的末尾。它返回数组的新长度。
例子
尝试以下代码来了解数组在 Solidity 中的工作原理。
pragma solidity ^0.5.0; contract test { function testArray() public pure{ uint len = 7; //dynamic array uint[] memory a = new uint[](7); //bytes is same as byte[] bytes memory b = new bytes(len); assert(a.length == 7); assert(b.length == len); //access array variable a[6] = 8; //test array variable assert(a[6] == 8); //static array uint[3] memory c = [uint(1) , 2, 3]; assert(c.length == 3); } }