玩转solidity --04数据类型(引用类型)
2018-04-11 本文已影响6人
DavieKong
引用类型
数组
数组是可以在编译时固定大小的,也可以是动态的。
固定长度类型数组的声明
pragma solidity ^0.4.4;
contract ArrDemo {
// 数组的长度为5,数组里面的存储的值的类型为uint类型
uint [5] Arr = [1,2,3,4,5];
}
通过length方法获取数组长度遍历数组求总和
pragma solidity ^0.4.4;
contract ArrDemo {
// 数组的长度为5,数组里面的存储的值的类型为uint类型
uint [5] Arr = [1,2,3,4,5];
// 通过for循环计算数组内部的值的总和
function numbers() constant public returns (uint) {
uint num = 0;
for(uint i = 0; i < Arr.length; i++) {
num = num + Arr[i];
}
return num;
}
}
声明数组时,一旦长度固定,将不能再修改数组的长度,不过数组元素的值可以修改
可变长度的数组
可变长度类型数组的声明
pragma solidity ^0.4.4;
contract ArrDemo {
uint [] Arr = [1,2,3,4,5];
function Arr_Length() constant returns (uint) {
return Arr.length;
}
}
uint [] Arr = [1,2,3,4,5],这句代码表示声明了一个可变长度的T数组,因为我们给它初始化了5个无符号整数,所以它的长度默认为5。因为长度可变,所以我们可以修改数组的长度,往数组中添加和删除元素等。
结构体
Solidity 提供了一种方法来定义新类型的形式结构,如下面的例子所示:
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
}
初始化一个storage类型的状态变量。
方法一
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
Person _person = Person(18,101,"liyuechun");
}
方法二
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
Person _person = Person({age:18,stuID:101,name:"liyuechun"});
}
初始化一个memory类型的变量。
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
function personInit() {
Person memory person = Person({age:18,stuID:101,name:"liyuechun"});
}
}
映射
映射类型被声明为 mapping _KeyType => _ValueType, _KeyType可以是除了映射以外的其他任何类型,_ValueType可以是任何类型,包括映射。
映射没有长度,也没有一个键或值的被“set”的概念。
例如
pragma solidity ^0.4.0;
contract MappingExample {
mapping(address => uint) balances;
function update(address a,uint newBalance) public {
balances[a] = newBalance;
}
function getBalance(address a) constant public returns (uint) {
return balances[a];
}
}