Solidity學習 (9)陣列特性

2021-08-28 14:29:56 字數 1813 閱讀 3402

一、定長陣列

要注意定長陣列的長度與內容要匹配

uint[3] memory a = [uint(1), 2, 3];                                   //這是正確定義

uint[3] memory a = [1, 2, 3];                                   //這樣也不行

string[2] memory b = ["a"];                                          //錯誤的定義

二、變長陣列

對於變長陣列,在初始化分配空間前不可使用,可以通過new關鍵字來初始化乙個陣列。

memory: 

uint memory memvar;

//通過new初始化乙個memory的變長陣列

memvar = new uint(2);

storage:

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單元 特殊變數和函式 表示式和控制結構 控制...