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);
}
Solidity-变量和数据类型[复合类型_1]的更多相关文章
- [Go] 复合类型(数组、切片、字典、结构体)变量的 初始化 及 注意事项
Go变量 初始化 对 复合类型(数组.切片.字典.结构体)变量的初始化是,有一些语法限制: 1.初始化表达式必须包含类型标签: 2.左花括号必须在类型尾部,不能另起一行: 3.多个成员初始值以逗号分隔 ...
- 深入理解PHP内核(五)变量及数据类型-变量的结构和类型
原文链接:http://www.orlion.ga/238/ 编程语言的类型可以分为强类型和弱类型两种,PHP是弱类型语言,但是C语言是强类型语言.在官网PHP实现内部,所有变量使用同一种数据结构(z ...
- PHP 注释 数据类型 变量的定义/输出 类型的获取/转换 可变变量
注释方法: 1,单行注释: // 2, 多行注释: /* */ 二,数据类型 1,integer(整数型):在三十二位操作系统中它的有效范围是:-2147483648~+2147 ...
- 变量和基本类型——复合类型,const限定符,处理类型
一.复合类型 复合类型是指基于其他类型定义的类型.C++语言有几种复合类型,包括引用和指针. 1.引用 引用并非对象,它只是为一个已存在的对象所起的另外一个名字. 除了以下2种情况,其他所有引用的类型 ...
- ECMAScript1.1 js书写位置 | 声明变量 | 基本数据类型 | 数据类型转换 | 操作符 | 布尔类型的隐式转换
js书写位置 由于在写css样式时使用的时双引号,所以我们在写js代码时建议使用单引号(‘’)! 行内式 <input type="button" value="点 ...
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- PHP变量和数据类型
编程语言可以分为三大类 1. 静态类型语言,比如:C/Java等,在静态语言类型中,类型的检查是在编译期(compile-time)确定的. 2. 动态语言类型,比如:PHP,python等各种脚本语 ...
- 学习C++.Primer.Plus 4 复合类型
本章介绍的有复合类型有: 数组. 字符串. 结构. 共用体. 指针 数组: 声明数组时数组长度必须为常量(或const). 只有初始化时可以用“=”,其它时候均不可以给数组直接赋值,除了赋值的元素以外 ...
- Python变量、数据类型6
1.Python变量 变量,即代表某个value的名字. 变量的值存储在内存中,这意味着在创建变量时会在内存中开辟一个空间. !!!即值并没有保存在变量中,它们保存在计算机内存的深处,被变量引用.所以 ...
- c++学习总结--复合类型,const。
复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复 ...
随机推荐
- Android SmartTable表格框架1_如何使用
SmartTable github地址:https://github.com/huangyanbin/smartTable 参考:https://juejin.cn/post/684490354910 ...
- CF1583H Omkar and Tours 题解
题意: 给定一个 \(n\) 个点的树,每条边有权值 \(t\) 和 \(c\).一条路径的权值为所经过节点的 \(\max(c)\). 每个点有权值 \(e\). 给出 \(q\) 个询问,每次询问 ...
- 如何让别人访问你本地允许的Vue本地项目
步骤一: 将config/index.js 中的host: localhost 改为 host:'0.0.0.0'步骤二:在package.json 将scripts 下面的dev 后 ...
- 基于VAE的风险分析:基于历史数据的风险分析、基于实时数据的风险分析
目录 引言 随着人工智能和机器学习的发展,风险分析已经成为许多行业和组织中不可或缺的一部分.传统的基于经验和规则的风险分析方法已经难以满足现代风险分析的需求,因此基于VAE的风险分析方法逐渐成为了主流 ...
- 2 大数据实战系列-spark shell wordcount
1 启动spark shell cd /home/data/app/hadoop/spark-2.1.1-bin-hadoop2.7/bin ./spark-shell --master spark: ...
- Win10激活步骤、密钥key
统安装完毕后,首先以Win+R打开CMD命令行窗口,按下Win+X,选择命令提示符(管理员). Win10企业版 用户举例请依次输入: slmgr /ipk NPPR9-FWDCX-D2C8J-H87 ...
- ArrayList按指定大小分割集合
ArrayList按指定大小分割集合 项目中使用SpringDataJpa的使用,用到了批量操作,发现框架本身有限制,长度不能超过1000,所以就百度了一下,网上都说是分段处理,也有说用OR的,但数据 ...
- Unity UGUI的LayoutElement(布局元素)组件的介绍及使用
Unity UGUI的LayoutElement(布局元素)组件的介绍及使用 1. 什么是LayoutElement组件? LayoutElement是Unity UGUI中的一个布局元素组件,用于控 ...
- C++子类的构造函数
子类的构造函数 子类可以有自己的构造函数 子类没有构造函数,默认系统会调用父类的构造函数 子类有自己的构造函数,系统会先运行父类的构造函数,随后运行子类的构造函数,对子类对象进行覆盖和拓展 即不论子类 ...
- 语音合成技术汇总1:Glow-TTS:通过单调对齐实现文本到语音的生成流
今天开始开一期语音合成经典论文的翻译 Glow-TTS:通过单调对齐实现文本到语音的生成流 摘要: 最近,文本到语音(Text-to-Speech,TTS)模型,如FastSpeech和ParaNet ...