美文网首页区块链
玩转solidity --04数据类型(引用类型)

玩转solidity --04数据类型(引用类型)

作者: DavieKong | 来源:发表于2018-04-11 11:23 被阅读6次

    引用类型

    数组

    数组是可以在编译时固定大小的,也可以是动态的。

    固定长度类型数组的声明

    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];
        }
    }
    

    相关文章

      网友评论

        本文标题:玩转solidity --04数据类型(引用类型)

        本文链接:https://www.haomeiwen.com/subject/mkeahftx.html