首页 资讯 > > 正文

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

来源:博客园 发布日期:2023-09-08 19:16:53 分享到:

复合类型的数据包括: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);    }

关键词:

x 广告

知识分享 为什么犹太人不过圣诞节

犹太人不过圣诞节,主要是因为犹太人信奉犹太教,圣诞节在犹太教里面没有任何的意义,所以犹太人不过圣诞节。犹太人(希伯来语:יְהוּד

百科 什么是种畜禽概念

所谓种畜禽是指能用来繁殖配种的的家畜家禽,包括家养的猪、牛、羊、马、驴、驼、兔、犬、鸡、鸭、鹅、鸽、鹌鹑等及其卵、精液、胚胎等遗传

复原民国旧菜单 一批“消失的名菜”重现羊城

  中新网广州12月5日电 (记者 程景伟)“粤宴中国·消失的名菜”活动4日晚在广州博物馆镇海楼广场举行,一批业已失传或十分罕见的传统粤

青海再度“双清零”:战“疫”催生定点救治医院反思与成长

  中新网西宁12月5日电 题:青海再度“双清零”:战“疫”催生定点救治医院反思与成长  作者 潘雨洁  全面停诊、四下无人;火线冲

世界海拔最高高铁客运站山丹马场站运营

  中新网兰州12月5日电 (记者 杨艳敏)记者从中国铁路兰州局集团有限公司获悉,12月5日10时29分随着嘉峪关南至西安北D2696次动车组列车

千年古都洛阳为何要建青年友好型城市?

  中新网洛阳12月5日电 题:千年古都洛阳为何要建青年友好型城市?  记者 肖开霖 李贵刚  千年古都洛阳日前公布《洛阳市建设青年

甘肃万余河长公示牌拥有“电子身份证” 局地启“千里眼”治水

  中新网兰州12月5日电 (记者 冯志军)记者5日从甘肃省水利厅获悉,今年以来,甘肃全面推动河长公示牌信息化建设,为全省河流换发“电子

满洲里市向呼伦贝尔市“手递手”异地转运3批次隔离人员

  (抗击新冠肺炎)满洲里市向呼伦贝尔市“手递手”异地转运3批次隔离人员  中新网呼伦贝尔12月5日电 (记者 张玮)5日,内蒙古自治区呼

x 广告

Copyright   2015-2022 世界海洋网版权所有  备案号:琼ICP备2022009675号-1   联系邮箱:435 227 67@qq.com