solidity基础语法(以太坊solidity合约)

07-17 1357阅读

solidity基础语法(以太坊solidity合约)

  • 1-值类型和取值范围
  • 2-引用类型
  • 3-引用类型高阶
  • 4-固定数组和动态数组

    1-值类型和取值范围

    https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency

    https://learnblockchain.cn/docs/solidity/types.html

    solidity基础语法(以太坊solidity合约)

    定长数组是值类型,不定长数组是引用类型

    String也是引用类型

    字符串、不定长数组及结构体都是引用类型

    solidity基础语法(以太坊solidity合约)

    solidity基础语法(以太坊solidity合约)

    当部署出现问题等等,但代码无错时,尝试离开网站,再次进入重新编译部署

    solidity基础语法(以太坊solidity合约)

    注意solidity版本

    值类型修改_a不会影响到_b,只是值的复制

    而引用类型则是会影响的

    solidity基础语法(以太坊solidity合约)

    solidity基础语法(以太坊solidity合约)

    Demo1和demo2的合约区分类型unit

    pragma solidity >=0.4.0 =0.6.1  函数调用完毕后消失
            // 2: 状态,全局变量  ---> 随着合约部署到区块链中(以太坊分布式账本) 
            // 3: 调用数据 (暂时理解成内存变量 略)
            
    // 4: 默认的函数参数,包括返回的参数,他们默认是memory。默认的局部变量是storage。而状态变量肯定是storage(不用指定)
    // 5: 不同数据位置的引用类型赋值会创建副本,而相同数据位置引用类型仅仅赋值指针
    // 注意:在版本0.5.0之前,数据位置可以省略,在0.5.0之后需要指定
    contract RefType{
        
        function modifyName(string memory name) pure public returns(string memory){
            // 声明临时string类型的变量
            // string memory name1 = name;
            // // string是可变量的,但是可以先强转为字符数组
            // bytes(name1)[0] = 'J';
            string memory name1 = name;
            bytes(name)[0] = 'J';
            return name1;
            
        }
    }
    

    solidity基础语法(以太坊solidity合约)

    修改name1返回name1,值变了

    修改name返回name1则和上面的结果一样

    相同的引用类型是指针复制

    即传入的string memory name和赋值string memory name1 = name;都是相同的引用类型,是指针赋值

    solidity基础语法(以太坊solidity合约)

    引用类型必须指定数据存储位置,数据存储位置还会影响引用类型之间的赋值

    3-引用类型高阶

    如果是引用类型,并且它的数据位置是memary,则其传递的是指针,没有产生相应的副本

    pragma solidity >=0.6.1  storage name1 传递的是指针
            //  string storage name1 = name; 
            // storage name --> memory name1 传递的是数据的副本  
            string memory name1 = name; 
            bytes(name1)[0] = 'S';
        }
    }
        string public _name = "solidity";   //加入的public为访问修饰符,若不加,编译部署后,在左下测无此变量
    // 1: solidity: 数据类型:值类型,引用类型 (数组、结构体,映射、字符串(bytes数组)
    有些合约需要存储到分布式账本,所以在solidity中不但有数据类型还有数据类型所存的位置,存储位置针对引用类型和值类型无关
    // 2: 值传递是副本,而引用类型既可传递指针,也可传递副本(传递规则受数据位置影响)
    // 3: 三种位置,先掌握内存与存储变量
            // 1: 内存,局部变量 --> 函数调用完毕后消失
            // 2: 状态,全局变量  ---> 随着合约部署到区块链中(以太坊分布式账本) 
            // 3: 调用数据 (暂时理解成内存变量 略)
            
    // 4: 默认的函数参数,包括返回的参数,他们默认是memory。默认的局部变量是storage。而状态变量肯定是storage(不用指定)
    // 5: 不同数据位置的引用类型赋值会创建副本,而相同数据位置引用类型仅仅赋值指针
    

    状态变量默认是storyge存储类型的

    4-固定数组和动态数组

    pragma solidity >=0.6.0 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]