Solidity学习::(14)变量初始化

变量初始化


1、初始化的值

值类型

  • bool的默认值为false
  • bytes32的默认值为32字节长的0
  • uint默认为0
  • address默认为0x0

对于引用类型

  • bytes类型默认值为空字节数组
  • string为默认值为空串
  • 动态数组uint8[] memory arr为空。

 

2、 声明后使用方式

值类型

  • 对于值类型,声明变量后,即赋值为默认值,可直接使用。

引用类型如下讨论

(1) 动态数组

对于动态数组,声明后,仍需分配内存后方可访问

参见:https://blog.csdn.net/dieju8330/article/details/82906679

下给出正确的使用方式:

pragma solidity ^0.4.0;

contract ArrayInitialOk{
  function f() returns (bytes1, uint8){
    bytes memory bs = new bytes(1); //使用new关键字分配空间
    uint8[] memory arr = new uint8[](1);

    return (bs[0], arr[0]);//分配空间之后,才可访问元素
  }
}

(2)映射

映射的声明后,不用显式初始化即可直接使用,只是对应的值都是初始化的值

 (3)枚举

枚举类型不用显式初始化,默认值将为0。即顺位第一个值。

(4)结构体

 结构体声明后,不用显式初始化即可使用。当没有显式初始化时,其成员值均为默认值。


作用域问题:

 变量无论在函数内什么位置定义,其作用域均为整个函数,而非大多数据语言常见的块级作用域。

【一些特殊的例子就是,虽然没有执行到,但是只要有声明的语句,对应的值就会被初始化】

pragma solidity ^0.4.0;

contract FunctionScope2{
  function f() returns (uint8){
    if(false){
      uint8 foo = 10;
    }
    return foo;
  }
}

 返回结果:

你可能感兴趣的:(区块链学习)