1. 程式人生 > >Solidity學習::(14)變數初始化

Solidity學習::(14)變數初始化

變數初始化

1、初始化的值

值型別

  • bool的預設值為false
  • bytes32的預設值為32位元組長的0
  • uint預設為0
  • address預設為0x0

對於引用型別

  • bytes型別預設值為空位元組陣列
  • string為預設值為空串
  • 動態陣列uint8[] memory arr為空。

2、 聲明後使用方式

值型別

  • 對於值型別,宣告變數後,即賦值為預設值,可直接使用。

引用型別如下討論

(1) 動態陣列

下給出正確的使用方式:

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;
  }
}

 返回結果: