首页 资讯 > 正文

Solidity-变量和数据类型[复合类型_1]

分享到:
x

复合类型的数据包括:array(数组)、struct(结构体)和mapping(映射),其中array和struct也称为引用类型。

复合类型数组(array)

数组(array)是一种用于存储相同类型元素的集合,分为固定长度的静态数组和长度可变的动态数组。需要注意的是,数组中的元素类型不能是映射类型(mapping),因为映射类型本身就是一种复杂的数据结构,无法直接存储在数组中。

uint[5] array1;     //声明了一个长度为5的静态数组,用于存储无符号整数类型的数据    uint[] array2;      //声明了一个动态数组,它可以更具需要在运行是调整大小
赋值:

为静态数组赋值可以直接赋值也可以逐个赋值:


【资料图】

直接赋值:在合约的构造函数中,直接使用静态数组的初始化列表来初始化数组元素。

逐个赋值:使用索引运算符"[]",给静态数组的不同位置赋值。

uint[3] public Array;       //声明一个长度为3的静态数组Array        //直接赋值    constructor(){        Array = [1, 2, 3];      //在构造函数中直接初始化数组    }        //逐个赋值    function assign(uint value1, uint value2, uint value3) public{        Array[0] = value1;        Array[1] = value2;        Array[2] = value3;      //逐个给数组的每个位置赋值    }

为动态数组赋值的方式也有多种:

使用".push()"方法逐个赋值:使用".push()"方法将元素逐个添加进数组的末尾。

整体赋值:将一整个数组直接赋值给目标数组。

索引赋值:使用索引运算符"[]"来为索引的元素赋值。

uint[] public Array;        //声明一个动态数组        //".push()"方法赋值    function add(uint value) public{        Array.push(value);      //使用",push()"方法在数组末尾添加元素    }        //整体赋值    function addArray(uint[] memory values) public{        Array = values;         //将整个数组赋值给目标数组    }    //索引赋值    function assign(uint index, uint _value) public{        Array[index] = _value;  //对数组的某个位置赋值    }
数组方法:

".push()"方法:".push(_value)"用于在动态数组的末尾添加一个元素,".push()"可在动态数组末尾添加"0"元素。

".pop()"方法:".pop()"用于删除动态数组的末尾元素。

".length"方法:".length"方法用于返回数组的当前长度。

其中".push()"方法和".pop()"方法只能用于动态数组。

特殊:bytes也是数组,是一种动态长度的字节数组,类似于动态数组,可以存储任意长度的字节数据,使用时不用加索引符"[]"。

bytes public Bytes;         //声明一个"bytes"类型的变量        function setBytes(bytes memory data) public{        Bytes = data;           //通过"setBytes"函数为"Bytes"赋值    }
结构体(struct)

solidity中的结构体(struct)类似于C/C++中的结构体,允许将多个不同数据类型的成员组合在一起以表示一个实体。

//定义一个名为Student的结构体    struct Student{        string stuName;         //字符串成员,表示学生姓名        uint stuId;             //无符号整型成员,表示学生学号    }        Student public student;     //声明一个Student类型的变量
赋值:

为结构体成员赋值同样有多种方式:

直接赋值:直接为结构体成员进行赋值。

构造函数赋值:如果结构体包含在合约中,可以用构造函数对结构体进行赋值。

传参赋值:将结构体作为函数参数传递,在函数内进行赋值。

//用上述Student结构体进行示例        //直接赋值    Student memory student1;    student1.stuName = "Tom";    student1.stuId = 111111;        Student memory student2 = Student("Jack", 222222);//也可按结构体成员一次赋值        //构造函数赋值    constructor(string memory name, uint id){        student = Student(name, id);    }        //传参赋值    function setStudent(string memory name, uint id) public{        student = Student(name, id);    }

上一篇:ST世茂1-8月销售面积34万平方米 销售签约额55亿元

下一篇:最后一页

x