ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

solidity开发2-基本数据类型与数组入门

2022-01-03 18:32:13  阅读:207  来源: 互联网

标签:function 入门 solidity 数据类型 storageArr uint external 数组 memory


简要说明

本节简单介绍基本数据类型和一些基本的关键字,数组的简单使用。知识点的说明会直接通过代码注释的方式来展示,接下来,直接show you the code

show you the code

DataTypeOne.sol

pragma solidity >=0.7.0 <0.9.0;

/**
    基本数据类型:
    固定长度:
    bool 
    uint 
    adress 
    bytes32:其实还有bytes1 bytes2 bytes3等等。。 一旦你声明了bytesn 则该变量的length属性即为n

    变长:
    bytes: 类似于byte[] 
    数组类型: uint[]  bytes32[]
    mapping
    string: 等同于bytes,但是不允许使用长度(没有length属性)或者索引进行访问 

    自定义
    enum
    struct

    函数的修饰词:
    public: 可以内部或者外部调用
    external: 仅可外部调用
    internal: 可内部或者子合约调用
    private: 仅可内部调用

    变量的作用域:
    storage: 全局的 直接写在合约属性范围域的,或者在函数内部使用storage关键字声明
    memory: 函数范围的,每次运行都重新生成

*/
contract DataTypeOne {
    uint value;
    uint[] storageArr;
    bytes3 a;   // 声明字符串a 该字符串的长度最大为3 类似于数据库中的varchar定义
    address ar;

    string str;
    mapping(uint => address) map;
    
    
    function getValue() external view returns(uint) {
        return value;
    }
    
    function setValue(uint _value) external {
        a = "12";
        uint[] storage innerStorage ;
        value = _value;
    }

    function  initStorageArray() external {
        storageArr.push(10);
        storageArr.push(1);
        // 需要注意两点
        // 1. 对于没有声明长度的storage数组,如果要增加数组长度,则只能通过push的方法来实现 storageArr[n]这种方式只能修改当前长度内的元素,不能新增一个元素,否则会数组越界报错
        // 2. 因为storage范围的数组的作用域是整个区块链的,所以该方法每调用一次,都会依次往数组后面加上10,1 两个元素
        // storageArr[1] = 1;
        storageArr[1] = 5;
        delete storageArr[0];   // 不会删除元素,只是将该位置的元素的设置为对应数据类型的默认值 uint即为0
    }

    function getStorageArr() external view returns(uint[] memory) {
        return storageArr;
    }

    /**
    * pure和view关键字的区别:
         pure既不能修改区块链变量,也不能读取区块链变量,即只能处理memory范围的变量
         view则只是不能修改,可以读取
      数组作为函数参数和返回值:
        作为函数传入参数时需要用 calldata来修饰
        作为返回值需要用 memory来进行修饰
    */ 
    function getMemoryArr() external pure returns(uint[] memory) {
        uint[] memory memoryArr = new uint[](10);
        // memoryArr.push(1);       // memory类型的数组必须要在初始化的时候指定长度,且不支持push的方式来增加数组长度
        memoryArr[0] = 10;
        memoryArr[9] = 11;
        return memoryArr;
    }

    function getBytesLen() external view returns (uint) {
        a[1];   // 可以通过下标访问对应的字符
        return a.length;    // 此时输出3
    }

}



标签:function,入门,solidity,数据类型,storageArr,uint,external,数组,memory
来源: https://www.cnblogs.com/Kidezyq/p/15760122.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有