区块链

玩转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];
    }
}
上一篇下一篇

猜你喜欢

热点阅读