淘先锋技术网

首页 1 2 3 4 5 6 7

这一篇文章主要介绍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;

    }