欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

solidity復(fù)雜類型Data_Location怎么運用

這篇文章主要介紹“solidity復(fù)雜類型Data_Location怎么運用”,在日常操作中,相信很多人在solidity復(fù)雜類型Data_Location怎么運用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”solidity復(fù)雜類型Data_Location怎么運用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

為涇川等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及涇川網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、涇川網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

簡介

對于復(fù)雜類型例如array,struct都有一個都有一個額外的注解(annotation),可能是storage,memory,calldata之一。根據(jù)上下文總是有一個默認的注解類型。但是一般可以通過storage和memory關(guān)鍵字顯示的修改。

對于函數(shù)的出參和入?yún)⒁话隳J的是memory類型(external 函數(shù)的入?yún)⒗馐菑娭频腸alldata類型)

對于局部變量默認的是storage類型(可以通過memory修改)

對于狀態(tài)變量強制的是storage類型(不能通過memory修改)

關(guān)于Data Location

storage

會寫入?yún)^(qū)塊鏈中

memory

不會持久化(不會寫入到區(qū)塊鏈中)

calldata

不可修改,不可持久化

關(guān)于局部變量和狀態(tài)變量

pragma solidity ^0.4.18;

contract DL{
    uint [] stateVariable;//狀態(tài)變量(state variable)

    function normal(uint [] inArg) public returns(uint outArg){
        uint [] localVar;//局部變量(本地變量,local variable)
        return 0;
    }

    function cd(uint [] inArg)  external returns(uint outArg){
        return 0;
    }
}

上面代碼的stateVariable就是狀態(tài)變量,inArg就是入?yún)?,outArg就是出參

stateVariable的data location就是storage

localVar是局部變量,data location是memory

函數(shù)normal的inArg的data location是memory outArg也是memory

函數(shù)cd的inArg的data location是calldata outArg是memory

總結(jié)

強制的 data location:

  1. external 函數(shù)的入?yún)? calldata

  2. 狀態(tài)變量:storage

默認的 data location:

  1. 一般函數(shù)的入?yún)⒑统鰠?返回參數(shù)):memory

  2. 所有局部變量:storage

storage與memory之間的賦值

  1. public的函數(shù)的入?yún)⒌膁ata location不能是storage

function storaegPara(Person storage allen) public returns(uint8 age,string name){
    person = allen;
    return (person.age,person.name);
}

像上面這種就會出編譯錯誤。

  1. 局部變量的memory不能賦值給局部變量的storage,但是可以賦值給狀態(tài)變量的storage

pragma solidity ^0.4.18;

contract DL{
    struct Person{
        uint8 age;
        string name;
    }

    Person person = Person({age:20,name:"tim"});//狀態(tài)變量,強制storage(state variable)

    function storaegPara(Person storage allen) internal returns(uint8 age,string name){
        person = allen;
        return (person.age,person.name);
    }

    function testStoraegPara() returns(uint8 age,string name){
        Person allen = Person({age:22,name:"allen"});
        return storaegPara(allen);
    }
}

像上面的就會編譯錯誤。從前面我們知道:

Person allen = Person({age:22,name:"allen"});

等價于:

Person memory allen = Person({age:22,name:"allen"});

當(dāng)調(diào)用storaegPara(allen)的時候,相當(dāng)于把一個memory的局部allen變量賦值給一個storage的局部變量allen。

這是因為storage是靜態(tài)分配存儲空間的,對于storage的賦值,更像是對指針的賦值。

pragma solidity ^0.4.18;

contract DL{
    struct Person{
        uint8 age;
        string name;
    }

    Person person = Person({age:20,name:"tim"});//狀態(tài)變量,強制storage(state variable)

    function storaegPara(Person memory allen) internal returns(uint8 age,string name){
        person = allen;
        return (person.age,person.name);
    }

    function testStoraegPara() returns(uint8 age,string name){
        Person memory allen = Person({age:22,name:"allen"});
        return storaegPara(allen);
    }
}
  1. storage可以對memory進行賦值,執(zhí)行的是拷貝操作。(修改新的memory變量不會影響原來storage變量)

  2. memory對memory的賦值是引用

memory和storage賦值總結(jié)

  1. 同類賦值(memory對memory,storage對storage)是引用,相當(dāng)于指針不會執(zhí)行數(shù)據(jù)拷貝。

  2. memory和storage相互賦值,執(zhí)行的是數(shù)據(jù)拷貝,但是注意memory不能對局部storage賦值

memory和storage 數(shù)組

  1. 對于變長數(shù)組必須使用new初始化之后才能訪問

  2. new 產(chǎn)生的是memory類型的,不能轉(zhuǎn)換為局部的storage,所以可以看到在函數(shù)中下面的代碼是會出編譯錯誤的:

uint [] storage data = new uint[](1);
  1. 對于storage的變長數(shù)組,可以通過給length賦值調(diào)整數(shù)組長度。還可以使用后面提到的push()方法,來隱式的調(diào)整數(shù)組長度

  2. 對于memory的變長數(shù)組,不支持修改length屬性,來調(diào)整數(shù)組大小。memory的變長數(shù)組雖然可以通過參數(shù)靈活指定大小,但一旦創(chuàng)建,大小不可調(diào)整

到此,關(guān)于“solidity復(fù)雜類型Data_Location怎么運用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

文章名稱:solidity復(fù)雜類型Data_Location怎么運用
文章分享:http://chinadenli.net/article40/pdsgeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站制作、網(wǎng)站內(nèi)鏈、響應(yīng)式網(wǎng)站、App開發(fā)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)