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++的一个复 ...
随机推荐
- 各种版本的Linux 镜像下载网址
今天发现Linux 镜像下载网址感觉很不错,分享给有需要的小伙伴们 访问地址 Linux操作系统各版本ISO镜像下载(包括oracle linux\redhat\centos\ubuntu\debia ...
- 渗透测试-struts2攻防环境搭建拿shell
一.下载Jspstudy 打开目录D:\JspStudy\tomcat\webapps 二.打开struts2并进行拿shell 1.打开struts2 在浏览器中输入网址http://localho ...
- Python基础 - python解释器
Python解释器是什么 Python解释器本身也是个程序, 它是解释执行 Python代码的,所以叫解释器. 没有它,我们的Python代码是没有办法运行的. 怎么下载安装Python解释器 官 ...
- /etc/netplan/network-manager-all.yaml 配置服务器ip
本文为博主原创,转载请注明出处: /etc/netplan 是用于配置 Ubuntu 系统网络接口的目录.在 Ubuntu 中,网络配置的默认工具为 Netplan,而 /etc/netplan 则 ...
- CKS 考试题整理 (04)-secret
Task 在 namespace istio-system 中获取名为 db1-test 的现有secret的内容 将 username 字段存储在名为 /cks/sec/user.txt 的文件中, ...
- 前端基于 radio 增强单选框组件
前端基于radio增强单选框组件, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12977 效果图如下: # ## ...
- RLHF技术在智能娱乐中的应用:提高娱乐智能化和自动化水平”
目录 随着人工智能技术的不断发展,智能娱乐成为了人们越来越关注的话题.在智能娱乐领域中,RLHF技术的应用正在逐渐显现.本文将介绍RLHF技术在智能娱乐中的应用,提高娱乐智能化和自动化水平. 首先,我 ...
- 【AI新趋势期刊#1】GPT自动理解视频、AI法律顾问、大模型安全围栏
每天都要浏览大量AI相关新闻,是不是感到信息量爆炸,有效信息少? 这么多新产品和新工具,到底哪些是真正是有价值的,哪些只是浮躁的一时热点? 想参与AI产品和工具的开发,从哪里能够获得大量的灵感和思路? ...
- Unity的OnOpenAsset:深入解析与实用案例
Unity OnOpenAsset 在Unity中,OnOpenAsset是一个非常有用的回调函数,它可以在用户双击资源文件时自动打开一个编辑器窗口.这个回调函数可以用于自定义资源编辑,提高工作效率. ...
- playwright(十三) - PyTest基本使用
我们都知道,在做单元测试框架中有UnitTest和Pytest,前者是Python中自带无需安装,Pytest需要安装,今天我们来讲的就是Pytest,当然如果是做自动化,建议两个都要掌握一下,可 ...