Skip to content

Latest commit

 

History

History
93 lines (77 loc) · 2.81 KB

File metadata and controls

93 lines (77 loc) · 2.81 KB

101-06

引用类型,array,struct

solidity中的引用类型

引用类型(Reference Type):包括(array)和结构体(stuct),

数组 array

数组(Array)是Solidity常用的一种变量类型,用来存储一组数据(整数,字节,地址等等)。数组分为固定长度数组和可变长度数组两种:

  • 固定长度数组:在声明中指定数组的长度.用T[K]的格式声明,其中T是元素的类型,k是长度.
//固定长度 array
    uint[8] array1;
    bytes1[5] array2;
    address[100] array3;
    //可变长度array
    uint[] array4;
    bytes1[] array5;
    address[] array6;
    bytes array7;

bytes比较特殊,是数组,但不用加[].另外,不能用byte[]声明单字节数组,可以使用bytes或bytes1[]. bytes比bytes1[]省gas

创建数组的规则

  • 对于memory修饰的动态数组,可以用new操作符创建,但必须声明长度,并且声明后不能改变.
//memory动态数组
    uint[] memory array8 = new uint[](5);
    bytes memory array9 = new bytes(9);
  • 数组字面常数(array Literals)是写作表达式形式的数组,用[]包着来初始化array的一种方式,并且tyoe以第一个元素为准,因为在solidity中如果一个值没有指定type的话,会根据上下文推断元素的类型,默认最小单位类型是uint8

  • 如果创建的是动态数组,需要一个一个元素的赋值

uint[] memory x = new uint[](3);
x[0] = 1;
x[1] = 3;
x[2] = 4;
数组成员
  • length: 数组有一个包含元素数量的length成员,memory数组的长度在创建后是固定的.
  • push: 动态数组拥有push()成员,可以在数组最后添加一个0元素,并返回该元素的引用.
  • push(x):动态数组拥有push(x)成员,可以在数组最后添加一个x元素
  • pop():动态数组拥有pop(),可以移除数组最后一个元素

结构体 struct

solidity支持通过构造结构体的形式定义新的类型.结构体中的元素可以是原始类型,也可以是引用类型;结构体可以作为数组或元素的映射.创建结构体的方法如下:

//结构体
    struct Student{
        uint256 id;
        uint256 score;
    }
    Student student;//初始一个student结构体

给结构体赋值有四种方法:

  1. 在函数中创建一个storage的struct的引用
function fStudent_1() external {
        Student storage _student = student;
        _student.id = 11;
        _student.score = 100;
    }
  1. 直接引用状态变量的struct
function fStudent_2() external {
        student.id = 1;
        student.score = 80;
    }
  1. 构造函数式
function fStudent_3() external {
        student = Student(3,90);
    }
  1. key value
function fStudent_4() external {
        student = Student({id:4,score:60});
    }