《Solidity笔记》变量初始值

1 阅读1分钟

在 Solidity 中,每个变量在声明时都会有默认的初始值,这些值取决于变量的类型。了解这些初始值对于避免意外行为和错误至关重要。

1. 值类型初始值

  • bool: false
  • int/uint: 0
  • address: 0x0000000000000000000000000000000000000000
  • 定长字节数组 (bytes1bytes32): 每个字节 0
  • 枚举 (enum): 枚举的第一个成员

示例:

pragma solidity ^0.8.0;

contract InitialValues {
    bool public defaultBool; // false
    uint public defaultUint; // 0
    int public defaultInt; // 0
    address public defaultAddress; // 0x0000000000000000000000000000000000000000
    bytes1 public defaultBytes1; // 0x00
}

2. 引用类型初始值

  • 动态字节数组 (bytes/string): 空值 ""0x
  • 动态数组: 空数组
  • 固定大小数组: 每个元素初始化为该类型的初始值
  • 结构体 (struct): 所有成员初始化为其类型的初始值
  • 映射 (mapping): 空映射,查询任意键返回值类型的初始值

示例:

pragma solidity ^0.8.0;

contract InitialValues {
    bytes public defaultBytes; // 0x
    string public defaultString; // ""
    uint[] public defaultUintArray; // []
    struct Student {
        uint id;
        uint score;
    }
    Student public defaultStudent; // {id: 0, score: 0}
    mapping(address => uint) public defaultMapping; // 对任意地址查询返回 0
}

3. 函数返回值初始值

函数返回值未指定时,返回该类型的默认初始值。

示例:

pragma solidity ^0.8.0;

contract InitialValues {
    function getDefaultUint() public pure returns (uint) {
        uint x;
        return x; // 0
    }
}

4. 总结

Solidity 中每种数据类型都有默认初始值。理解这些初始值有助于编写安全可靠的智能合约,避免意外的行为和错误。