Solidity學習::(14)變數初始化
阿新 • • 發佈:2018-12-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; } }
返回結果: