这一篇文章主要介绍solidity中的两个重要变量类型:数组(array)和结构体(struct)。
数组是一种数据结构,它是存储同类元素的有序集合。
数组中的特定元素由索引访问,索引值从0开始。例如,声明一个数组变量,如numbers,可以使用numbers[0]、numbers[1]和…,数字[99]表示单个变量。
数组(Array)是solidity常用的一种变量类型,用来存储一组数据(整数,字节,地址等等)。数组主要有两种固定长度数组和可变长度数组。
要声明一个固定长度的数组,需要指定元素类型和数量,如下所示
type arrayName [ arraySize ];
这是一维数组。arraySize必须是一个大于零的整数数字,type可以是任何数据类型。例如,声明一个uint类型,长度为10的数组:balance,如下所示:
uint balance[10];
案例:
pragma solidity ^0.4.4;
contract C {
// 数组的长度为5,数组里面的存储的值的类型为uint类型
uint [5] T = [1,2,3,4,5];
}
可变长度数组
在声明时不指定数组的长度。用T[]的格式声明,其中T是元素的类型,例如(bytes比较特殊,是数组,但是不用加[]):
// 可变长度 Array
uint[] array4;
byte[] array5;
address[] array6;
bytes array7;
数组成员
length
数组有一个length成员来表示元素数量。动态数组可以通过更改.length成员,在存储器(而不是内存)中调整大小。创建后,内存数组的大小是固定的(但是是动态的,长度可以是函数参数)。
push
动态存储数组和bytes(不是字符串)有一个名为push的成员函数,可用于在数组末尾追加一个元素,函数返回新的长度。
结构体
类似于C语言,Solidity 也有结构体(struct)类型,用于表示复合型数据。结构体是引用类型。
要定义结构,使用struct关键字。struct关键字定义了一个新的数据类型,包含多个成员。struct语句的格式如下:
struct struct_name {
type1 type_name_1;
type2 type_name_2;
type3 type_name_3;
}
例如,一本书的信息:
·Title
·Author
·Subject
·Book ID
就可以用结构体来表示。
示例:
struct Book {
string title;
string author;
uint book_id;
}
给结构体赋值的两种方法:
// 给结构体赋值
// 方法1:在函数中创建一个storage的struct引用
function initStudent1() external{
Student storage _student = student; // assign a copy of student
_student.id = 11;
_student.score = 100;
}
// 方法2:直接引用状态变量的struct
function initStudent2() external{
student.id = 1;
student.score = 80;
}