1. 程式人生 > >solidity智慧合約[38]-storage引用

solidity智慧合約[38]-storage引用

storage引入

storage屬性是一種引用型別。在如下的合約中,定義了動態長度陣列arrx,arrx儲存在以太坊虛擬機器storage空間中的變數。
當呼叫test方法之後,定義了變數uint[] Z。這個時候,如果我們在remix瀏覽器中進行編譯,我們會看到一個警告。因為預設的情況下,對於動態陣列
會加上storage屬性。也就是:uint[] storage x。storage屬性是一種引用型別,其引用了以太坊虛擬機器storage空間中的狀態變數。而不是對於值的拷貝

因此,在test函式中,當修改了Z的長度和Z的內容之後,再次檢視arrx的長度和內容,會發現對應發生了變化。

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
pragma solidity ^0.4.23;


contract storageStart{

   uint[] public arrx=[1,2,3,4,5];



   function test()  public{
       uint[]  Z = arrx;

       Z[0] = 100;

       Z.length = 10
;

   }

   function getLength()  public view returns(uint){

       return arrx.length;
   }


}

image.png