【从0学习Solidity】 6. 引用类型, array, struct

【从0学习Solidity】 6. 引用类型, array, struct

在这里插入图片描述

  • 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。
  • 关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!
  • 本文收录于 不写代码没饭吃 的学习汇报系列,大家有兴趣的可以看一看。
  • 欢迎访问我们的微信公众号:不写代码没饭吃,获取更多精彩内容、实用技巧、行业资讯等。您关注的是我们前进的动力!

这一讲,我们将介绍solidity中的两个重要变量类型:数组(array)和结构体(struct)。

数组 array

数组(Array)是solidity常用的一种变量类型,用来存储一组数据(整数,字节,地址等等)。数组分为固定长度数组和可变长度数组两种:

  • 固定长度数组:在声明时指定数组的长度。用T[k]的格式声明,其中T是元素的类型,k是长度,例如:
    // 固定长度 Arrayuint[8] array1;bytes1[5] array2;address[100] array3;
  • 可变长度数组(动态数组):在声明时不指定数组的长度。用T[]的格式声明,其中T是元素的类型,例如:
    // 可变长度 Arrayuint[] array4;bytes1[] array5;address[] array6;bytes array7;

注意bytes比较特殊,是数组,但是不用加[]。另外,不能用byte[]声明单字节数组,可以使用bytesbytes1[]bytesbytes1[] 省gas。

创建数组的规则

在solidity里,创建数组有一些规则:

  • 对于memory修饰的动态数组,可以用new操作符来创建,但是必须声明长度,并且声明后长度不能改变。例子:
    // memory动态数组uint[] memory array8 = new uint[](5);bytes memory array9 = new bytes(9);
  • 数组字面常数(Array Literals)是写作表达式形式的数组,用方括号包着来初始化array的一种方式,并且里面每一个元素的type是以第一个元素为准的,例如[1,2,3]里面所有的元素都是uint8类型,因为在solidity中如果一个值没有指定type的话,默认就是最小单位的该type,这里 uint 的默认最小单位类型就是uint8。而[uint(1),2,3]里面的元素都是uint类型,因为第一个元素指定了是uint类型了,我们都以第一个元素为准。

下面的例子中,如果没有对传入 g() 函数的数组进行 uint 转换,是会报错的。

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;contract C {function f() public pure {g([uint(1), 2, 3]);}function g(uint[3] memory) public pure {// ...}
}
  • 如果创建的是动态数组,你需要一个一个元素的赋值。
    uint[] memory x = new uint[](3);x[0] = 1;x[1] = 3;x[2] = 4;

数组成员

  • length: 数组有一个包含元素数量的length成员,memory数组的长度在创建后是固定的。
  • push(): 动态数组拥有push()成员,可以在数组最后添加一个0元素,并返回该元素的引用。
  • push(x): 动态数组拥有push(x)成员,可以在数组最后添加一个x元素。
  • pop(): 动态数组拥有pop()成员,可以移除数组最后一个元素。

Example:
在这里插入图片描述

结构体 struct

Solidity支持通过构造结构体的形式定义新的类型。结构体中的元素可以是原始类型,也可以是引用类型;结构体可以作为数组或映射的元素。创建结构体的方法:

    // 结构体struct Student{uint256 id;uint256 score; }Student student; // 初始一个student结构体

给结构体赋值的四种方法:

    //  给结构体赋值// 方法1:在函数中创建一个storage的struct引用function initStudent1() external{Student storage _student = student; // assign a copy of student_student.id = 11;_student.score = 100;}

Example:
在这里插入图片描述

     // 方法2:直接引用状态变量的structfunction initStudent2() external{student.id = 1;student.score = 80;}

Example:
在这里插入图片描述

    // 方法3:构造函数式function initStudent3() external {student = Student(3, 90);}

Example:
在这里插入图片描述

     // 方法4:key valuefunction initStudent4() external {student = Student({id: 4, score: 60});}

Example:
在这里插入图片描述

总结

这一讲,我们介绍了solidity中数组(array)和结构体(struct)的基本用法。下一讲我们将介绍solidity中的哈希表——映射(mapping)。

在这里插入图片描述

如果这份博客对大家有帮助,希望各位给作者一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给作者的意见,欢迎评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一百八十二、大数据离线数仓——离线数仓从Kafka采集、最终把结果数据同步到ClickHouse的完整数仓流程(待续)

一、目的 经过6个月的奋斗&#xff0c;项目的离线数仓部分终于可以上线了&#xff0c;因此整理一下离线数仓的整个流程&#xff0c;既是大家提供一个案例经验&#xff0c;也是对自己近半年的工作进行一个总结。 二、项目背景 项目行业属于交通行业&#xff0c;因此数据具有很…

《信息系统项目管理师教程(第4版)》第1章至第5章 信息化发展、信息技术发展、信息系统治理、信息系统管理、信息系统工程 常见考点、知识点、思维导图、xmind

第一章至第五章多以选择题形式考察&#xff0c;分值在20分左右。已将考点、知识点整理成思维导图&#xff0c;可免费下载。以下是思维导图的部分截图&#xff1a; 第一章 信息化发展 第二章 信息技术发展 第三章 信息系统治理 第四章 信息系统管理 第五章 信息系统工程

【100天精通Python】Day67:Python可视化_Matplotlib 绘动画,2D、3D 动画 示例+代码

1 绘制2D动画&#xff08;animation&#xff09; Matplotlib是一个Python绘图库&#xff0c;它提供了丰富的绘图功能&#xff0c;包括绘制动画。要绘制动画&#xff0c;Matplotlib提供了FuncAnimation类&#xff0c;允许您创建基于函数的动画。下面是一个详细的Matplotlib动画示…

SpringCloud Gateway--网关服务基本介绍和基本原理

&#x1f600;前言 本篇博文是关于SpringCloud Gateway的基本介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力…

Postman应用——测试脚本Test Script

文章目录 Test Script脚本CollectionFolderRequest 解析响应体断言测试 测试脚本可以在Collection、Folder和Request的Pre-request script 和 Test script中编写&#xff0c;测试脚本可以检测请求响应的各个方面&#xff0c;包括正文、状态代码、头、cookie、响应时间等&#x…

Vue脚手架一站式搭建项目

一、什么是vue-cli 1.1如果你只是简单写几个Vue的Demo程序&#xff0c;那么你不需要VueCLI脚手架。 1.2.如果你在开发大型项目&#xff0c;那么你需要&#xff0c;并且必然需要使用VueCLI。 1.2.1使用Vue.js开发大型应用时&#xff0c;我们需要考虑代码目录结构、项目结构和…

安全基础 --- nodejs沙箱逃逸

nodejs沙箱逃逸 沙箱绕过原理&#xff1a;沙箱内部找到一个沙箱外部的对象&#xff0c;借助这个对象内的属性即可获得沙箱外的函数&#xff0c;进而绕过沙箱 前提&#xff1a;使用vm模块&#xff0c;实现沙箱逃逸环境。&#xff08;vm模式是nodejs中内置的模块&#xff0c;是no…

凹凸贴图和法线贴图的区别

1、什么是凹凸贴图 凹凸贴图&#xff08;bump mapping&#xff09;是一种计算机图形学中的渲染技术&#xff0c;用于在给定的表面上模拟微小的凹凸纹理。通过在表面法线方向上微调每个像素的光照值&#xff0c;可以给平滑的表面增加视觉上的凹凸感。 在凹凸贴图中&#xff0c;每…

DockerKubernetes ❀ Service下Port端口区分

文章目录 概述案例 概述 在Kubernetes中&#xff0c;Service&#xff08;svc&#xff09;是一种抽象机制&#xff0c;用于将一组 Pod 暴露给其他应用程序或服务。Service 可以有三种类型的端口&#xff1a; nodePort&#xff1a;这是 Service 在节点上公开的端口。可以使用此…

基于微信小程序的校园生活管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境学生微信端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝1…

软考考试多少分算通过?

软考证书取得需要达到总分45分&#xff0c;每门科目满分为75分。因此&#xff0c;不要小看45分&#xff0c;在考试中获得这个分数并不容易。此外&#xff0c;软考要求一次性通过&#xff0c;如果没有通过&#xff0c;成绩将不被保留。因此&#xff0c;必须在一次考试中成功通过…

服务网格和性能优化:介绍如何通过服务网格提高微服务架构的性能和可扩展性

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

vue3项目学习一:创建vue3项目

创建vue3项目 一、使用vue-cli创建vue3项目1.安装vue-cli2.创建vue3项目 二、初始化项目结构三、导入element-ui 一、使用vue-cli创建vue3项目 1.安装vue-cli 先查看是否安装vue-cli 在cmd窗口输入vue -V查看版本&#xff0c;如果出现 则说明存在vue-cli,如果出现 则需要安…

Mac使用CMakeList编译ImGUi项目

文章目录 创建项目1.下载ImGui2.下载GLAD3.下载GLFW4.编译项目5.运行截图 创建项目 我这里创建一个demo&#xff0c;opengl这个是可以跨平台的&#xff0c;所以在mac上使用ImGui的opengl3示例 1.下载ImGui 我使用的是docking版本的&#xff0c;这个版本支持停靠功能&#xff…

Linux Qt5.15.2 编译QWebEngine源码支持音视频H264

背景 默认自带的QWebEngine 因版权问题不支持音视频功能&#xff0c;需要自己编译源码以支持。 平台&#xff1a;Linux&#xff08;UOS V20 1050&#xff09; Qt&#xff1a;5.15.2 准备工作 下载 Qt 5.15.2 对应版本源码&#xff0c;使用镜像网站或者Qt Maintenance Tool工…

计算机竞赛 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…

一台PoE交换机可以为多少个设备提供供电?

如今在安防监控领域&#xff0c;许多网络设备都支持PoE供电。在网络监控工程中&#xff0c;为了节省布线成本并提高便捷性&#xff0c;大多数工程商选择使用PoE供电方案&#xff0c;也就是使用PoE交换机为监控摄像头提供电力。那么&#xff0c;一台功率输出以太网&#xff08;P…

AI创作专家,免费的AI创作专家工具

AI创作专家是一种崭新的工具&#xff0c;它们利用先进的人工智能技术&#xff0c;帮助创作者和写手更轻松地应对创作挑战。这些工具不仅可以生成文字&#xff0c;还可以提供灵感、帮助构思和组织思路&#xff0c;使创作过程更加高效。 147GPT批量文章生成工具​www.147seo.com/…

深入探究序列化与反序列化:原理、应用和最佳实践

目录 什么是对象的序列化和反序列化序列化步骤反序列化步骤案例演示Java中哪些字段不能序列化序列化与反序列化的重要性序列化与反序列化的应用场景 什么是对象的序列化和反序列化 序列化&#xff08;Serialization&#xff09;是指将对象转化为字节流的过程&#xff0c;以便于…

想学嵌入式开发,薪资怎么样?

想学嵌入式开发&#xff0c;薪资怎么样&#xff1f; 对于嵌入式工程师来说呢&#xff0c;它重点学习内容就是首先一定要打好基础&#xff0c;如果从编程语言角度来讲&#xff0c;那么可以在语言上选C或者C&#xff0c;你可以选择其中任何一门语言作为你的入门。 最近很多小伙伴…