Solidity
分配一個數組是創建一個指針還是複制一個數組?(堅固)
這是程式碼:
pragma solidity^0.4.16; contract Test { struct SomeData { address[] users; } address[] nullArray; mapping(uint => SomeData) SomeDataList; function insertData(uint number) { SomeDataList[number] = SomeData({ users : nullArray }); SomeDataList[number].users.push(msg.sender); } }
在
insertData
函式中,我初始化一個新結構並分配nullArray
給users
欄位(users
現在儲存它的副本nullArray
或指向它的指針?)。之後,我將一些數據推送到這個結構中,我不確定全域變數是否nullArray
會受到影響。
使用者現在儲存 nullArray 的副本還是指向它的指針?
它將創建一個獨立的副本。據我了解,因為
nullArray
和SomeDataList
都是狀態變數,所以會有兩個獨立的副本。這裡的solidity docs中提到,
儲存和記憶體之間以及狀態變數 (甚至來自其他狀態變數)之間的分配總是創建一個獨立的副本。
因此,
我將一些數據推送到這個結構中,我不確定全域變數 nullArray 是否會受到影響
nullArray
不會受到影響。更新
我在Remix-IDE中使用一些附加功能嘗試了您的程式碼,如下所示,
pragma solidity^0.4.16; contract Test { struct SomeData { address[] users; } address[] nullArray; mapping(uint => SomeData) SomeDataList; function insertData(uint number) { SomeDataList[number] = SomeData({ users : nullArray }); SomeDataList[number].users.push(msg.sender); } function getusers(uint number) constant returns(address []){ return SomeDataList[number].users; } function getNullArray() constant returns(address[]){ return nullArray; } function pushNullArray(address addr){ nullArray.push(addr); } }
和
nullArray
和SomeDataList
充當兩個不同的變數。以下是呼叫後的函式呼叫結果,pushNullArray(address addr)
並insertData(uint number)
帶有一些任意值。他們不一樣。
希望這可以幫助!