Solidity-变量和数据类型[复合类型_1]
复合类型的数据包括: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); } 关键词: