首页 > 其他分享 >Solidity-变量和数据类型[复合类型_1]

Solidity-变量和数据类型[复合类型_1]

时间:2023-09-08 19:46:24浏览次数:51  
标签:Student Solidity 数据类型 复合 uint 数组 Array public 赋值

复合类型的数据包括: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);
}

 

标签:Student,Solidity,数据类型,复合,uint,数组,Array,public,赋值
From: https://www.cnblogs.com/n0hackers/p/17688410.html

相关文章

  • Redis五大基本数据类型之Hash哈希(转载)
    一、概述Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便: Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD: Hash类型的常见命令HSETkeyfieldvalue:......
  • 列表数据类型内置方法
    列表数据类型内置方法1.方法描述多个值,比如爱好2.定义方法hobby_list=['play','swimming','dancing','6666']lt=list['nick']print(lt)3.内置方法优先掌握索引取值hobby_list=['play','swimming','dancing',......
  • 数据类型内置方法
    目录1为什么要有数据类型1.1数字类型内置方法整形1.1.2浮点型1为什么要有数据类型对不同类型的变量需要用不同的数据类型去描述?名字——字符串爱好——用列表(因为不只有一个爱好)个人信息——字典1.1数字类型内置方法整形1.作用:身高/体重/年龄/ID号2.定义方式:y=10......
  • 集合数据类型内置方法
    集合基本用不到,考试会考作用就是存储一大堆元素的东西,容器数据类型定义方式以{}用逗号隔开不可变数据类型s={1,2,1,'a','a','c'}print(s)去重 #用得到乱序lis=[1,2,3,1,3]print(set(lis))print(list(set(lis)))s={}#空大括号是字典,不是集合,定义空集合必须得......
  • 字典数据类型内置方法
    作用对于值添加描述信息使用它定义方法用{}以逗号隔开加入键值对key:valueinfo_dict={'name':'hanyingshuo','age':16,'height':175,'hobby_list':['dapao','anqu','jimi']}内置方法优先掌握1.按key取值,即可取也可改变print(in......
  • JS基础-数据类型转换
    JS存在不同的数据类型,这就需要一些方法将不同的数据类型做转换。转数字类型其他类型的值转换成数字,这在工作中很常见。有以下几种转换方式Number函数parseInt函数parseFloat函数NumberNumber函数可以将其他类型转成数字类型,具体示例如下字符串转数字<script>......
  • 入门篇-其之三-基本数据类型及其转换
    文章结构如下目录整数类型浮点类型字符类型布尔类型数字的进制表示(了解)原码、反码、补码(了解)自动类型提升强制类型转换Java的数据类型分为基本数据类型和引用数据类型,具体分类如下图:对于初学者而言,认为字符串类型String也属于基本数据类型,事实上String属于类,即引用数据类型。......
  • 数据类型基础(8)
    解压缩#一次性取出多个值lis=[1,2,3]x1,x2,x3=lisprint(x1)print(x2)print(x3)#当我不需要2时 虽然可以打印出来,但是尽量不要打印x1,_,x3=lis#_表示不需要,约定俗称的#当我只要第3个元素print('*'*50)_,_,x3=lisprint(x3)#‘*’的作用*_会把前面所......
  • 数据类型基础(6)
    列表类型定义(容器类型),放多个数据类型,例如:↓e.glis=['nick','handsome'] gangpao_hobby_list=['dapao','piao','666'] nick_hobby_list=list(['read','music','run']) print(nick_hobby_lis......
  • 数据类型基础(5)
    字符串string定义:把字符串在一起定义方式name1=str('sun_da_pao')name2="xiao_gang_pao"word='xiao_gang_pao说了一句话:"万般皆下品惟有读书高"'三引号也可以换行word2='''xiao_gang_pao'说了一句话:"万般皆下品惟有读书高"'''pri......