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

Solidity-变量和数据类型[复合类型_1]的更多相关文章

  1. [Go] 复合类型(数组、切片、字典、结构体)变量的 初始化 及 注意事项

    Go变量 初始化 对 复合类型(数组.切片.字典.结构体)变量的初始化是,有一些语法限制: 1.初始化表达式必须包含类型标签: 2.左花括号必须在类型尾部,不能另起一行: 3.多个成员初始值以逗号分隔 ...

  2. 深入理解PHP内核(五)变量及数据类型-变量的结构和类型

    原文链接:http://www.orlion.ga/238/ 编程语言的类型可以分为强类型和弱类型两种,PHP是弱类型语言,但是C语言是强类型语言.在官网PHP实现内部,所有变量使用同一种数据结构(z ...

  3. PHP 注释 数据类型 变量的定义/输出 类型的获取/转换 可变变量

    注释方法: 1,单行注释:     // 2,  多行注释:     /*   */ 二,数据类型 1,integer(整数型):在三十二位操作系统中它的有效范围是:-2147483648~+2147 ...

  4. 变量和基本类型——复合类型,const限定符,处理类型

    一.复合类型 复合类型是指基于其他类型定义的类型.C++语言有几种复合类型,包括引用和指针. 1.引用 引用并非对象,它只是为一个已存在的对象所起的另外一个名字. 除了以下2种情况,其他所有引用的类型 ...

  5. ECMAScript1.1 js书写位置 | 声明变量 | 基本数据类型 | 数据类型转换 | 操作符 | 布尔类型的隐式转换

    js书写位置 由于在写css样式时使用的时双引号,所以我们在写js代码时建议使用单引号(‘’)! 行内式 <input type="button" value="点 ...

  6. 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...

  7. PHP变量和数据类型

    编程语言可以分为三大类 1. 静态类型语言,比如:C/Java等,在静态语言类型中,类型的检查是在编译期(compile-time)确定的. 2. 动态语言类型,比如:PHP,python等各种脚本语 ...

  8. 学习C++.Primer.Plus 4 复合类型

    本章介绍的有复合类型有: 数组. 字符串. 结构. 共用体. 指针 数组: 声明数组时数组长度必须为常量(或const). 只有初始化时可以用“=”,其它时候均不可以给数组直接赋值,除了赋值的元素以外 ...

  9. Python变量、数据类型6

    1.Python变量 变量,即代表某个value的名字. 变量的值存储在内存中,这意味着在创建变量时会在内存中开辟一个空间. !!!即值并没有保存在变量中,它们保存在计算机内存的深处,被变量引用.所以 ...

  10. c++学习总结--复合类型,const。

    复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复 ...

随机推荐

  1. ODOO13之七:Odoo 13开发之记录集 – 使用模型数据

    在上一篇文章中,我们概览了模型创建以及如何从模型中载入和导出数据.现在我们已有数据模型和相关数据,是时候学习如何编程与其进行交互 了.模型的 ORM(Object-Relational Mapping ...

  2. RESTful API 简介

    RESTful API 简介 想必使用过 PHP.JSP 这一类服务器动态页面技术的程序员应该都还记得,在使用这种传统的动态页面架构构建应用程序的时候,用于描述用户界面的 HTML 页面通常都是在服务 ...

  3. .Net后台调用js,提示、打开新窗体、关闭当前窗体

    .Net后台调用js,提示.关闭当前窗体.打开新窗体 Response.Write("<script>window.alert('支付成功!');window.open('/Jk ...

  4. 纠删码技术在vivo存储系统的演进【上篇】

    作者:vivo 互联网服务器团队- Gong Bing 本文将学术界和工业界的纠删码技术的核心研究成果进行了相应的梳理,然后针对公司线上存储系统的纠删码进行分析,结合互联网企业通用的IDC资源.服务器 ...

  5. 自然语言处理 Paddle NLP - 检索式文本问答-理论

    问答系统(Question Answering System,QA) 是信息检索系统的一种高级形式,它能用准确.简洁的自然语言回答用户用自然语言提出的问题.其研究兴起的主要原因是人们对快速.准确地获取 ...

  6. Blazor前后端框架Known-V1.2.1

    V1.2.1 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. 概述 基于C#和Blazor实现的快速开发框架,前后端分离,开箱即用. 跨平台,单 ...

  7. python笔记:第六章函数&方法

    1.系统函数 由系统提供,直接拿来用或是导入模块后使用 a = 1.12386 result = round(a,2) print(result) > 1.12 2.自定义函数 函数是结构化编程 ...

  8. 【IDEA】 远程调试

    远程调试 使用特定JVM参数运行服务端代码 要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是: -Xdebug -Xrunjdwp:transport=dt_so ...

  9. 【Flyway】初识Flyway,将Flyway集成于Spring项目

    什么是Flyway Flyway官方网站:点击这里 官方描述: Flyway extends DevOps to your databases to accelerate software deliv ...

  10. hexo博客yilia主题_缺失模块_解决方案

    hexo博客yilia主题,左侧栏目有一个全部文章的按钮,刚开始开始报错缺失模块,如下图: 我解决了这个问题着实不容易饶了弯路,但是跟着提示步骤,其实很简单,走起: 1.查看node版本 win键+R ...