变量初始值

  1. 值类型初始值
  2. 引用类型初始值
  3. delete操作符
  • 在remix上验证
  • solidity中,声明但没赋值的变量都有它的初始值或默认值。这一讲,我们将介绍常用变量的初始值。

    值类型初始值

    • boolean: false

    • string: ""

    • int: 0

    • uint: 0

    • enum: 枚举中的第一个元素

    • address: 0x0000000000000000000000000000000000000000 (或 address(0))

    • function
      
      • internal: 空白方程
      • external: 空白方程

    可以用public变量的getter函数验证上面写的初始值是否正确:

        bytes1 public _bytes; //0x00
        bool public _bool; // false
        string public _string; // ""
        int public _int; // 0
        uint public _uint; // 0
        address public _address; // 0x0000000000000000000000000000000000000000
    
        enum ActionSet { Buy, Hold, Sell}
        ActionSet public _enum; // 第一个元素 0
    
        function fi() internal{} // internal空白方程 
        function fe() external{} // external空白方程 
    

    引用类型初始值

    • 映射mapping: 所有元素都为其默认值的mapping
    • 结构体struct: 所有成员设为其默认值的结构体
    • 数组array
      • 动态数组: []
      • 静态数组(定长): 所有成员设为其默认值的静态数组

    可以用public变量的getter函数验证上面写的初始值是否正确:

    // SPDX-License-Identifier: MIT
    
    //声明solidity版本 这行代码意思是源文件将不允许小于 0.8.4 版本或大于等于 0.9.0 版本的编译器编译
    pragma solidity ^0.8.4; 
    
    contract HelloWeb3{
    
        // Reference Types
        uint[8] public _staticArray; // 所有成员设为其默认值的静态数组[0,0,0,0,0,0,0,0]
        uint[] public _dynamicArray; // `[]`
        mapping(uint => address) public _mapping; // 所有元素都为其默认值的mapping
        // 所有成员设为其默认值的结构体 0, 0
        struct Student{
            uint256 id;
            uint256 score; 
        }
        Student public student;
    
    }
    

    delete操作符

    delete a会让变量a的值变为初始值。

        // delete操作符
        bool public _bool2 = true; 
        function d() external {
            delete _bool2; // delete 会让_bool2变为默认值,false
        }
    

    在remix上验证

    • 部署合约查看值类型、引用类型的初始值 img
    • 值类型、引用类型delete操作后的默认值 img

    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。