前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以太坊中Solidity行 · 大金刚境:语法详解#结构体与一维数组

以太坊中Solidity行 · 大金刚境:语法详解#结构体与一维数组

作者头像
Regan Yue
发布2022-02-11 13:52:19
5320
发布2022-02-11 13:52:19
举报
文章被收录于专栏:ReganYue's BlogReganYue's Blog

以太坊中Solidity行 · 大金刚境:语法详解#结构体与一维数组

众所周知,以太坊开发拥有四种境界:金刚境,指玄境,天象境以及陆地神仙。今天我们继续来学习Solidity的语法来深造大金刚境界。

一、结构体

我们先来看一看C、Go里面都有的结构体吧~

代码语言:javascript
复制
contract Struct{
    struct Bank{
        address addr;
        uint balance;
        Person p;
    }

    struct Person{
        string name;
        int age;
        string sex;
    }

    Person p1 = Person({
        name: "ReagnYue",
        age:21,
        sex:"female"
    });

    Bank b = Bank(
        0xA507E286b9F230801A5d0BD9F3940EAE0DC22fd8,
        888,
        p1
    );
}

上面是在solidity中编写两种结构体,并初始化两个结构体。这里我们需要注意的是,这里我们初始化结构体时,采用命名方式初始化,在小括号后面还有一个花括号。而我们初始化Bank结构体时的那样,按成员顺序进行初始化,就不需要在小括号后面再添加一个花括号了,只需要小括号即可。

接下来我们来看看如何获取结构体的值。

代码语言:javascript
复制
    function getBank() public returns(address,uint,string memory,int,string memory){
        return (b.addr,b.balance,b.p.name,b.p.age,b.p.sex);
    }

我们可以通过一个函数来获取结构体的值,你会不会有疑惑为什么返回值不能直接返回结构体?这是因为solidity的结构体现在只能够在合约之内使用或者在继承合约内使用,若要在参数以及返回值之中使用结构体,这个函数一定需要声明internal。

下面我们就来演示获取结构体的值。

image-20220129181108619
image-20220129181108619

二、一维数组

在solidity中,数组分为定长数组和变长数组。对于storage类型的数组来说,其元素类型可以为所有的类型,而如果是memeory类型的数组,其元素的类型与其函数的可见性存在关系。

我们先来介绍一下定长数组的有关操作:

代码语言:javascript
复制
contract StaticArray {
    uint[5] array = [1,8,7,8,6];
    

    function getArray() view public returns(uint[5]) {
        return array;
    }


    function update(uint index, uint value)public {
        array[index] = value; 
    }


    function query(uint index) view public  returns(uint) {
        return array[index];
    }


    function getLength() view public returns(uint) {
        return array.length;
    }
    
    
}

这里介绍了定长数组的4中操作,获取数组,更新数组元素,查询数组某个元素,获取数组的长度。需要注意的是,在老版本中对于数组的length属性,定长数组不可修改,而不定长数组是可以修改这一属性的。而在新版本中,这个属性是只读的,似乎是不能修改的。

接下来我们再来看一看不定长数组的操作:

代码语言:javascript
复制
contract DArr {
    uint[] a = [2,2,3,8,1];
    uint[] a2 = new uint[](10); 


    function append(uint value) public {
        a.push(value);
    }
  
  
    function update(uint index, uint value) public {
        a[index] = value; 
    }

    
    function getLength() public view returns(uint) {
        return a.length;
    }
    
    
}

不定长数组的初始化有两种。如上第二行和第三行代码。

然后与定长数组不同的是,它的添加元素操作,这里主要是通过push来添加元素。通过push方法可以附加新的元素到数组末尾,返回值是新的长度。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 以太坊中Solidity行 · 大金刚境:语法详解#结构体与一维数组
  • 一、结构体
  • 二、一维数组
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档