自定义结构体

pragma solidity ^0.4.4;contract Students {struct Person {uint age;uint stuID;string name;}}
  • Person就是我们自定义的一个新的结构体类型,结构体里面可以存放任意类型的值。

怎么理解结构体:如果我们要描述一个人,需要说明他的姓名、年龄、性别、身高等方面,如果每添加一个人就要写一遍name=“zhangshan”,age=28。。。太过麻烦,可以把这些描述的各个变量整合为一个结构体,调用这个结构体就意味着要添加一个人进去

数组,映射,结构体也支持自定义的结构体。我们来看一个自定义结构体的例子:

pragma solidity ^0.4.0;contract SimpleStruct{//学生struct Student{string name;int num;}//班级struct Class{string clsName;//学生的列表Student[] students;mapping(string=>Student)index;}
}

在上面的代码中,我们定义了一个简单的结构体Student,它包含一些基本的数据类型。另外我们还定义了一个稍微复杂一点的结构体Class,它包含了其它结构体Student,以及数组,映射等类型。Student[ ] students说明结构体可以看成是一个值类型,用法和uint等类型差不多。

数组类型的students和映射类型的index的声明中还使用了结构体。

初始化一个结构体

  • 方法一
pragma solidity ^0.4.4;contract Students {struct Person {uint age;uint stuID;string name;}#括号内的参数和结构体内的变量一一对应,等同于age=18,stuID=101,name="james"Person _person = Person(18,101,"james");    Person jack=Person(28,102,"jack");}
  • 方法二
pragma solidity ^0.4.4;contract Students {struct Person {uint age;uint stuID;string name;}#相比方法一,这一个更清晰但需要多输入三个变量的名字,输入顺序可以改变,自己取舍Person _person = Person({age:18,stuID:101,name:"james"});}

结构体的可见性:

关于可见性,目前只支持internal,所以结构体只能在合约内部和子合约内使用。包含结构体的函数必须显性声明为internal

例子:

pragma solidity ^0.4.0;contract A{struct S{string para1;int para2;}//这个函数的参数类型是上面定义的结构体S,因此需要显性声明为internalfunction f(S s) internal{//...}function f1(){//当前类中使用结构体S memory s = S("Test", 10);f(s);}
}contract B is A{function g(){//子合约中使用结构体S memory s = S("Test", 10);//调用父类方法f(s);}
}

在上面的代码中,我们声明了f(S s),由于它包含了structS,所以不对外可见,需要标记为internal。你可以在当前类中使用它,如f1()所示,你还可以在子合约中使用函数和结构体,如B合约的g()方法所示。

(转自:tryblockchain.org)

Solidity基础入门知识(八)结构体structs相关推荐

  1. Solidity基础入门知识(十)函数的访问权限和可见性

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 下面来继续介绍作为一个分布式网络语言所特有的internal和external这两种不同的函数调用方式,以及So ...

  2. Swift基础入门知识学习(12)-枚举(列举)-讲给你懂

    TED演讲的8个秘诀:学习18分钟高效表达-重点笔记 Swift基础入门知识学习(11-2)-閉包-第二篇-讲给你懂 目录 枚举(列举)语法 使用 Switch 语句匹配枚举(列举)值 相关值 原始值 ...

  3. 学python需要什么基础知识-学习Python需要知道哪些基础入门知识?

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python就业前景广阔.很多 ...

  4. 自己总结的MySQL基础入门知识,附思维导图

    第一次写博文,问题点可能比较多,辛苦大家帮忙指正,感谢大家. MySQL基础入门知识 前言 一.数据库基础知识 1.什么是数据库 2.数据库的分类 3.数据库的常用语言 4.数据库的常用操作方式 5. ...

  5. 数据结构基础入门知识

    数据结构基础入门知识 ------ 数据结构:理解和练习 <异类-不一样的成功启示录> IP/26 192 IP/25 128 IP/24 192. 128 64  32 16  2  1 ...

  6. c语言程序设计实验8,C语言程序设计实验八结构体.doc

    C语言程序设计实验八结构体 C语言程序设计实验八:结构体 请求用户输入若干个学生的基本情况,其中包括每位学生的学号.姓名和两门课(C语言.数学)的成绩.然后用下面的格式输出学生的成绩列表. 格式描述如 ...

  7. Python基础入门知识(2)

    接前面的文章: Python基础入门知识(1) Python基础入门教学 2 Python的基础知识 2.2 数据类型 2.2.2 数值类型 2.2.2.1 整数 2.2.2.2 浮点数 2.2.2. ...

  8. c语言 结构体ppt,C语言知识学习结构体.ppt

    C语言知识学习结构体.ppt Chap 9 结构,9.1 输出平均分最高的学生信息 9.2 学生成绩排序 9.3 修改学生成绩,本章要点,什么是结构结构与数组有什么差别 有几种结构的定义形式,它们之间 ...

  9. ps基础入门知识课程教程学习文字设计制作小白

    ps基础入门知识课程教程学习文字设计制作小白

最新文章

  1. [Google API](8)构建使用Google API的Java应用程序
  2. Windows 市场份额十年来首次跌破 90%
  3. wpf中xaml的类型转换器与标记扩展
  4. 对产品经理而言,有一种灾难叫“老板说”
  5. 在正确的方向坚持下去,一直坚持下去,直到有成果
  6. 【python数据挖掘课程】十八.线性回归及多项式回归分析四个案例分享
  7. yarn界面杀死application
  8. 在OpenCV中将cv::Mat绘制到MFC的视图中
  9. vue问题四:富文本编辑器上传图片
  10. 【agc004f】Namori Grundy
  11. java metric_java版的Metric工具介绍
  12. Maven 系列 2:Maven 本地仓库与远程仓库配置完整步骤以及修改 settings.xml 后的完整内容(配置非私服,远程仓储镜像强力推荐阿里云)
  13. SQL*Loader 详解
  14. c语言只能最大值不能最小值,用c语言编写输入10个无序的整数,去掉一个最大值和最小值,然后求其平均值...
  15. android 列表图片优化经历
  16. JavaScript的类型转换
  17. 7.微服务:从设计到部署 --- 重构单体应用为微服务
  18. 罗技 GHUB驱动的官方下载网址
  19. Java实现socket 客户端 长连接
  20. 北京找工作之艰难困苦

热门文章

  1. 全球科技创新股权交易中心系统成功入会
  2. Android不同Module之间Activity跳转(以腾讯IMDemo为例)
  3. 抓包工具:Fiddler下载、安装、使用 教程
  4. 【Kubernetes存储篇】StorageClass存储类动态生成PV详解
  5. 30s了解fori和foreach的区别
  6. 零成本用IIS实现做个表白OR情侣纪念网站当做礼物,公网可访问
  7. 揭秘搜狗测试的“运动文化”
  8. 主流区块链共识算法大全
  9. 单点登录(SSO)的实现—通行证的基本原理
  10. .net xml ajax 注册 ashx,AJAX.NET安装配置全指南