一、定長陣列
要注意定長陣列的長度與內容要匹配
uint[3] memory a = [uint(1), 2, 3]; //這是正確定義
uint[3] memory a = [1, 2, 3]; //這樣也不行
string[2] memory b = ["a"]; //錯誤的定義二、變長陣列
對於變長陣列,在初始化分配空間前不可使用,可以通過new關鍵字來初始化乙個陣列。
memory:三、多維陣列storage:uint memory memvar;
//通過new初始化乙個memory的變長陣列
memvar = new uint(2);
uint statevar;
statevar = new uint(2);
我們要建立乙個長度為5的uint陣列,每個元素又是乙個變長陣列。將被宣告為uint[5](注意,定義方式對比大多數語言來說是反的,使用下標訪問元素時與其它語言一致)。
pragma solidity ^0.4.6;
contract arraymd
function getflag(uint dynamicindex, uint lengthtwoindex) constant returns(bool flag)
}
1、length屬性【表示陣列長度】
storage屬性的陣列:storage屬性下的陣列可以通過length查詢陣列長度以及調整陣列長度。看下面例子:
執行結果:pragma solidity ^0.4.0;
contract autoextendarray
}
第一次:
第二次:
memory屬性的陣列:2、 push方法(僅支援storage屬性和bytes陣列)
可以將乙個新元素附加到陣列末端,返回值為當前長度。bytes和string
pragma solidity ^0.4.0;
contract bytes_string
}
3、evm的限制
不能通過外部函式返回變長的資料對於這樣的問題的一種臨時的解決辦法,是使用乙個非常大的定長陣列。
不過現在的版本好像是已經解決了這個問題。
solidity智慧型合約重要特性
solidity智慧型合約的一些重要特性,如變長陣列中的storage和memory變數,storage和memory的儲存位置以及字串陣列string使用。區塊鏈開發 以太坊 fabric bcos 密碼技術 共識演算法 位元幣 其他鏈 string,bytes 對於變長陣列,在初始化分配空間前不...
solidity學習筆記
1 狀態變數是放在區塊鏈上 2 view修飾的函式,讀取和訪問狀態變數,表示訪問狀態變數 區塊鏈上的資料 但是不會修改,僅限於訪問,不消耗資源 3 pure修飾的函式,不修飾也不讀取狀態變數 區塊鏈上的資料 不會消耗任何資源 4 不用view,pure等修飾的函式,會修改區塊鏈上的資料,會消耗資源 ...
Solidity學習筆記(3)
在此後的學習,將更加深入理解solidity的方方面面 solidity原始檔的布局 引入其他的原始檔 注釋合約的結構 型別變數型別 列舉 參考型別對映 包括左賦值的操作符 在基本型別間的轉換 型別匯出 單元區域性和全域性可見變數 ether單元 time單元 特殊變數和函式 表示式和控制結構 控制...