做网站开发用哪门语言/推广营销企业
solidity基础语法(以太坊solidity合约)
- 1-值类型和取值范围
- 2-引用类型
- 3-引用类型高阶
- 4-固定数组和动态数组
1-值类型和取值范围
https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency
https://learnblockchain.cn/docs/solidity/types.html
定长数组是值类型,不定长数组是引用类型
String也是引用类型
字符串、不定长数组及结构体都是引用类型
当部署出现问题等等,但代码无错时,尝试离开网站,再次进入重新编译部署
注意solidity版本
值类型修改_a不会影响到_b,只是值的复制
而引用类型则是会影响的
Demo1和demo2的合约区分类型unit
pragma solidity >=0.4.0 <0.7.0; // 声明solidity的版本// 创建一个智能合约(合约名第一个字母一般大写)
contract Demo01{uint _a; //solidity命名规范下划线_a,若直接a,在下面的函数中无法识别变量auint _b; // 整型属于值类型,赋值的本质是拷贝数据// 函数(无返回值,传入i,赋值给_a、_b)function setAll(uint i) public{_a = _b = i;}//solidity命名规范下划线_afunction setA(uint a) public{_a = a;}// view: 代表当前函数不会修改账本的数据,只读函数,不会修改账本数据,不写也行会有警告// int uint 大小默认是256//returns (uint,uint) 具有返回值function getAB() public view returns (uint,uint){return (_a,_b);}}contract Demo02{uint8 _a; // 0~255int8 _b; // 整型属于值类型,赋值的本质是拷贝数据 -128 ~127// 函数function setAll(uint8 a,int8 b) public{_a = a;_b = b;}function setA(uint8 a) public{_a = a;}// view: 代表当前函数不会修改账本的数据// int uint 大小默认是256,可以接受unit8的类型(当输入值300则超出unit界限255,int8 128范围)function getAB() public view returns (uint,int){return (_a,_b);}}
编译成功
值类型修改_a不会影响到_b,只是值的复制
而引用类型则是会影响的
// int uint 大小默认是256
在solidity中unit256,8等等类型
非常多的细微类型,java中硬件便宜,智能合约写的成本很高,所以严格限制写的操作
数据类型大小非常严格
设计使用等非常严格
2-引用类型
https://learnblockchain.cn/docs/solidity/types.html#reference-types
值类型是不断复制
告诉程序,引用类型是存到内存中作为临时变量还是存在状态中作为永久的变量
之前的合约,参数默认存储memery局部变量
内存memary临时的
存储storyge永久的
现在引用,不同的引用类型数据位置相互赋值
多了数据存储位置的概念在solidity
下方重要
pragma solidity >=0.6.1 <0.7.0;
// 1: solidity: 数据类型:值类型,引用类型 (数组、结构体,映射、字符串(bytes数组)// 2: 值传递是副本,而引用类型既可传递指针,也可传递副本(传递规则受数据位置影响)// 3: 三种位置,先掌握内存与存储变量// 1: 内存,局部变量 --> 函数调用完毕后消失// 2: 状态,全局变量 ---> 随着合约部署到区块链中(以太坊分布式账本) // 3: 调用数据 (暂时理解成内存变量 略)// 4: 默认的函数参数,包括返回的参数,他们默认是memory。默认的局部变量是storage。而状态变量肯定是storage(不用指定)// 5: 不同数据位置的引用类型赋值会创建副本,而相同数据位置引用类型仅仅赋值指针// 注意:在版本0.5.0之前,数据位置可以省略,在0.5.0之后需要指定
contract RefType{function modifyName(string memory name) pure public returns(string memory){// 声明临时string类型的变量// string memory name1 = name;// // string是可变量的,但是可以先强转为字符数组// bytes(name1)[0] = 'J';string memory name1 = name;bytes(name)[0] = 'J';return name1;}
}
修改name1返回name1,值变了
修改name返回name1则和上面的结果一样
相同的引用类型是指针复制
即传入的string memory name和赋值string memory name1 = name;都是相同的引用类型,是指针赋值
引用类型必须指定数据存储位置,数据存储位置还会影响引用类型之间的赋值
3-引用类型高阶
如果是引用类型,并且它的数据位置是memary,则其传递的是指针,没有产生相应的副本
pragma solidity >=0.6.1 <0.7.0;//contract RefType{// 状态变量 storage (不能修改为内存变量)(此类变量会随着合约的部署存储到分布式账本,后面的众筹的钱就要存到状态变量中//否则内存变量一旦执行完毕就会消失)string public _name = "solidity"; //加入的public为访问修饰符,若不加,编译部署后,在左下测无此变量。Public任何的属性和函数都可以访问function f() public{modifyName(_name);}// public 函数参数和返回数据类型必须为memory
// internal 受保护的函数,仅仅自身合约或者子合约(支持继承)才能被调用
//pure代表不能对当前变量读写所以去掉,下方在进行读写
//下方传入状态变量
//函数中赋值也为状态变量,数据存储位置相同传递的是指针,即更改某个只会影响到另一个值function modifyName(string storage name) internal{// storage name --> storage name1 传递的是指针// string storage name1 = name; // storage name --> memory name1 传递的是数据的副本 string memory name1 = name; bytes(name1)[0] = 'S';}
}string public _name = "solidity"; //加入的public为访问修饰符,若不加,编译部署后,在左下测无此变量// 1: solidity: 数据类型:值类型,引用类型 (数组、结构体,映射、字符串(bytes数组)有些合约需要存储到分布式账本,所以在solidity中不但有数据类型还有数据类型所存的位置,存储位置针对引用类型和值类型无关// 2: 值传递是副本,而引用类型既可传递指针,也可传递副本(传递规则受数据位置影响)// 3: 三种位置,先掌握内存与存储变量// 1: 内存,局部变量 --> 函数调用完毕后消失// 2: 状态,全局变量 ---> 随着合约部署到区块链中(以太坊分布式账本) // 3: 调用数据 (暂时理解成内存变量 略)// 4: 默认的函数参数,包括返回的参数,他们默认是memory。默认的局部变量是storage。而状态变量肯定是storage(不用指定)// 5: 不同数据位置的引用类型赋值会创建副本,而相同数据位置引用类型仅仅赋值指针
状态变量默认是storyge存储类型的
4-固定数组和动态数组
pragma solidity >=0.6.0 <0.7.0;// 数组是数据类型, 但更具体的说,它是依赖其它数据类型的数据结构(数组指的是相同类型的数值组)// Solidity中的数组可以是固定数组或者动态数组contract ArrDemo{// 固定数组:声明时预定了大小的数组,而且后期不能修改uint[5] age;
// 动态数组: 声明时没有预定大小的数组,可以新增元素
//后期商品的众筹,但是平台有多少个商品,初始是不知道的,商品是个复杂结构体uint[] age2 = [uint(10),20,30,40];//构造函数constructor()public{age = [uint(10),20,30,40];//初始化了4个元素,最后第五个元素未初始化默认零}// 通过for + length循环来进行迭代function sum() public view returns(uint){uint total = 0;for(uint i =0;i<age.length;i++){total += age[i];}// 固定数组Length不能修改// age.length = 10;return total;}// 固定数组可以通过index对数组的值进行操作, 但是不能新增function setValue(uint index,uint value)public{age[index] = value;// 静态数组没有push函数// age.push(value);}function sum2() public view returns(uint,uint){uint total = 0;for(uint i =0;i<age2.length;i++){total += age2[i];}// 固定数组Length不能修改// age.length = 10;return (total,age2.length); //返回多个值需要括号}// 动态数组支持新增操作(length大小是可以扩充的)function addValue(uint val) public{age2.push(val);}}
数组的遍历数组的更新,对动态数组的添加操作
相关文章:

solidity基础语法(以太坊solidity合约)
solidity基础语法(以太坊solidity合约) 1-值类型和取值范围2-引用类型3-引用类型高阶4-固定数组和动态数组 1-值类型和取值范围 https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency https://learnblockchain…...

【机器学习实战】电力需求预测挑战赛 Datawhale AI 夏令营 task2
【机器学习实战】电力需求预测挑战赛 Datawhale AI 夏令营 task2 一、赛题背景二、赛题任务三、评审规则四、具体实践4.1 实现的思路4.2 理论介绍GBDTLightGBM 4.3 代码的实现与运行4.3.1 导入模块4.3.2 探索性数据分析(EDA)4.3.3 特征工程4.3.4 模型训练…...

【设计模式】【创建型模式】【02工厂模式】
系列文章 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 系…...

FPGA设计中的流水线 -分割大的计算电路可以更快的处理数据。
FPGA(现场可编程门阵列)设计中的流水线优化是一种提高设计性能的技术,它通过将设计分解为多个阶段或步骤来实现。每个阶段可以并行执行,从而提高整体的吞吐量和效率。以下是流水线优化的一些关键概念和作用: 意思&…...

GNU/Linux - U-BOOT的GPIO command
在嵌入式Linux开发中,先运行的是u-boot,然后再加载Linux内核。 启动时如果设置了u-boot等待时间,在等待时间内,按任意键就会进入u-boot命令行环境。 在u-boot命令行环境下,可以使用gpio命令来操作GPIO。 Synopsis gpi…...

35.UART(通用异步收发传输器)-RS232(2)
(1)RS232接收模块visio框图: (2)接收模块Verilog代码编写: /* 常见波特率: 4800、9600、14400、115200 在系统时钟为50MHz时,对应计数为: (1/4800) * 10^9 /20 -1 10416 …...

OpenLayers学习笔记-点位聚合
需求 用户点击行政区划等操作后,从后台获取区域内的点位数据,在地图上聚合显示。用户手动取消聚合,点位直接渲染在地图上。 实现过程 使用后台返回的点位数据,通过new ol.source.Vector({features})创建矢量数据源。使用new ol.source.Cluster({source})创建聚合标注数据…...

flutter实现语言的国际化
目录 前言 一、GetX实现国际化(推荐) 1.安装Getx 2.创建国际化的文件 3.使用国际化字符串 4.配置GetMaterialApp 5.更改语言 6.系统语言 编辑 7.原生工程配置 1.iOS工程配 1.打开iOS工程,在Project的info里面添加语言 2.创建String File文件 2.andr…...

服务端正常启动了,但是客户端请求不到
服务端正常启动了,但是客户端请求不到有哪些原因?如何排查? 如果客户端请求的接口没有响应,排查的方式: 检查接口IP地址是否正确,ping一下接口地址。 检查被测接口端口号是否正确,可以在本机Telnet接口的IP和端口号…...

鸿蒙开发 -本地数据库操作
// 1导入模块 import relationalStore from @ohos.data.relationalStore;export class AthUserDbManager{//2.获取RdbStore实例,要注意的是,此处的getContext(this)用于获取应用上下文:getcreatDbtable(dbname:string){//配置数据库信息:const STORE_CONFIG :relationalStor…...

主机安全-进程、命令攻击与检测
目录 概述反弹shell原理nc/dev/xxx反弹shell下载不落地反弹Shell各种语言反弹shell linux提权sudosuid提权mysql提权 Dnslog参考 概述 本文更新通过在主机(不含容器)上直接执行命令或启动进程来攻击的场景。检测方面以字节跳动的开源HIDS elkeid举例。每…...

FPGA FIR fdatool filter designer MATLAB
位数问题 fdatool 先确定输入信号的位宽,比如17位在fdatool中,选set quantization parameters 选input/output 设置input word length 为17bit(not confirmed) fir compiler implementation 注意: 当设置输入位宽为16位时,ip核…...

水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集)
水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集) 目录 水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集) 1.前言 2. 水表数字识别的方法 3. 水表数字识别数据集 4. 水表数字分割模型训练 (1&#x…...

Windows 点云生成二维栅格图 [附C++完整代码实现]
点云压缩-2D栅格图 一、点云压缩(二维栅格图)二、算法流程三、代码实现四、结果可视化一、点云压缩(二维栅格图) 点云压缩:点云是海量点的集合,其数据量通常非常庞大。直接存储这些未经压缩的点云数据会消耗大量的存储空间,特别是在处理大规模的点云数据时,这个问题变得…...

SpringBoot结合ip2region实现博客评论显示IP属地
你好呀,我是小邹。 在现代的Web应用中,特别是博客和论坛类网站,为用户提供地理定位服务(如显示用户所在地理位置)可以极大地增强用户体验。本文将详细探讨如何使用Java和相关技术栈来实现在博客评论中显示用户的地址信…...

设计模式使用场景实现示例及优缺点(行为型模式——策略模式)
在遥远的王国里,有三个重要的角色:国王策略模式、他的皇家顾问算法家族,以及年轻的骑士接口。国王策略模式统治着整个王国,他的职责是确保每一个编程问题都能找到最合适的解决方案。 有一天,王国遇到了一场危机。编程王…...

ReactRouter v6升级的步骤
React Router v6 引入了一个 Routes 组件,它有点像 Switch ,但功能要强大得多。与 Switch 相比, Routes 的主要优势在于: <Routes> 中的所有 <Route> 和 <Link> 都是相对的。这导致在 <Route path> 和 &…...

【JVM实战篇】内存调优:内存问题诊断+案例实战
文章目录 诊断内存快照在内存溢出时生成内存快照MAT分析内存快照MAT内存泄漏检测的原理支配树介绍如何在不内存溢出情况下生成堆内存快照?MAT查看支配树MAT如何根据支配树发现内存泄漏 运行程序的内存快照导出和分析快照**大文件的处理** 案例实战案例1:…...

专业条码二维码扫描设备和手机二维码扫描软件的区别?
条码二维码技术已广泛应用于我们的日常生活中,从超市结账到公交出行,再到各类活动的入场验证,条码二维码的便捷性不言而喻,而在条码二维码的扫描识别读取过程中,专业扫描读取设备和手机二维码扫描软件成为了两大主要工…...

基于嵌入式Linux的高性能车载娱乐系统设计与实现 —— 融合Qt、FFmpeg和CAN总线技术
随着汽车智能化的发展,车载娱乐系统已成为现代汽车的标配。本文介绍了一个基于Linux的车载娱乐系统的设计与实现过程。该系统集成了音视频娱乐、导航、车辆信息显示等功能,旨在提供安全、便捷、丰富的驾驶体验。 1. 项目概述 随着汽车智能化的发展&…...

探索IP形象设计:快速掌握设计要点
随着市场竞争的加剧,越来越多的企业开始关注品牌形象的塑造和推广。在品牌形象中,知识产权形象设计是非常重要的方面。在智能和互联网的趋势下,未来的知识产权形象设计可能会更加关注数字和社交网络。通过数字技术和社交媒体平台,…...

泛微Ecology8明细表对主表赋值
文章目录 [toc]1.需求及效果1.1 需求1.2 效果2.思路与实现3.结语 1.需求及效果 1.1 需求 在明细表中的项目经理,可以将值赋值给主表中的项目经理来作为审批人员 1.2 效果 在申请人保存或者提交后将明细表中的人名赋值给主表中对应的值2.思路与实现 在通过js测…...

opencv—常用函数学习_“干货“_5
目录 十五、图像分割 简单阈值分割 (threshold) 自适应阈值分割 (adaptiveThreshold) 颜色范围分割 (inRange) 分水岭算法 (watershed) 泛洪填充 (floodFill) GrabCut算法 (grabCut) 距离变换 (distanceTransform) 最大稳定极值区域检测 (MSER) 均值漂移滤波 (pyrMean…...

JAVA零基础学习1(CMD、JDK、环境变量、变量和键盘键入、IDEA)
JAVA零基础学习1(CMD、JDK、环境变量、变量和键盘键入、IDEA) CMD常见命令配置环境变量JDK的下载和安装变量变量的声明和初始化声明变量初始化变量 变量的类型变量的作用域变量命名规则示例代码 键盘键入使用 Scanner 类读取输入步骤示例代码 常用方法处…...

Redis的安装配置及IDEA中使用
目录 一、安装redis,配置redis.conf 1.安装gcc 2.将redis的压缩包放到指定位置解压 [如下面放在 /opt 目录下] 3.编译安装 4.配置redis.conf文件 5.开机自启 二、解决虚拟机本地可以连接redis但是主机不能连接redis 1.虚拟机网络适配器网络连接设置为桥接模式…...

ubuntu 物理内存爆炸而不使用虚拟内存的问题
ubuntu 物理内存不足时有时候会不去使用虚拟内存,让虚拟内存空闲,而直接关闭占用内存的进程,如果在进行模型测试或训练时,就会导致训练或测试进程被杀死。 1. 修改 swappiness: cat /proc/sys/vm/swappiness sudo sysc…...

Python实现音频均衡和降噪
使用librosa库来读取音频文件,音频处理是一个复杂过程,这里只是简单的进行降噪和均衡。 import librosa import soundfile as sf def improve_audio_quality(input_file, output_file): # 读取音频文件 audio, sample_rate librosa.load(input_…...

【JavaScript 算法】贪心算法:局部最优解的构建
🔥 个人主页:空白诗 文章目录 一、贪心算法的基本概念贪心算法的适用场景 二、经典问题及其 JavaScript 实现1. 零钱兑换问题2. 活动选择问题3. 分配问题 三、贪心算法的应用四、总结 贪心算法(Greedy Algorithm)是一种逐步构建解…...

Azcopy Sync同步Azure文件共享
文章目录 Azcopy Sync同步文件共享一、工作原理二、安装 AzCopy在 Windows 上在 Linux 上 三、资源准备1. 创建源和目标 Azure 存储账户2. 创建源和目标文件共享3. 确定路径4. 生成源和目的存储账户的共享访问签名(SAS)令牌配置权限示例生成的 URL 四、A…...

单例模式 饿汉式和懒汉式的区别
单例模式(Singleton Pattern)是设计模式中最简单、最常见、最容易实现的一种模式。它确保一个类仅有一个实例,并提供一个全局访问点。单例模式主要有两种实现方式:饿汉式(Eager Initialization)和懒汉式&am…...