使用var關鍵字時,第一次賦值給變數,編譯器會自動推斷變數的型別,而且推斷後不能更改這個變數的型別了,如果更改了就會出錯,還有就是不能在函式引數中使用。注意:有時候var會推斷出乙個錯誤的型別。
案例:
pragma solidity ^0.4.18;
contract var
}
結果為:
solidity中var 推斷型別時,遵循就地最小的原則,也就是說,推斷uint型別時,它會預設選擇最小的。
案例:
pragma solidity ^0.4.18;
contract var
}
這樣的話,就會報錯:
之後賦值的資料在 這個型別以內就可以。。
var可以將函式賦值給乙個變數
特點:hexencodingto...函式,以關鍵字hex開頭,後面跟一些字串,比如hex"001122"
案例:
contract hex
16進製制與bytes轉換,轉換完成後也可以通過下標來取其指定的元素值。
案例:
contract hex
常量:在solidity中,並不是所有的的型別都支援常量,只有值型別與string型別支援。
string constant a ="wek";
常量定義時要注意需要宣告資料型別。
變數:
變數位置:
memory:儲存在記憶體中
storage:永久儲存在區塊鏈上
calldata:不用再程式中指定,只要是calldata中的資料,它都是唯讀的,並不持久化到區塊鏈上,一般在外部函式才會指定。
儲存位置說明:狀態變數預設儲存在storage上面,函式中的區域性變數也會儲存在storage上面,函式的引數和返回值會儲存在memory上面。
資料位置轉換:
memory ->memory 引用傳遞,會改變其源資料的值。
memory->storage 不會改變源資料的值。
storage->memory 資料拷貝 會改變源資料的值。
storage->storage 會改變源資料的值。
contract datalocal
function fmemory(uint[5] y)
// 2. memory->storage
function mtos() view public returns(uint[5])
// 函式裡面的變數,會直接引發錯誤,因為這本身是乙個非法操作
function infunc(uint x)
// 3. storage->storage
function st(uint[5] storage y) internal
function g() view returns(uint[5])
// 4. storage->memory
}
特點:使用者的自定義型別,,列舉可以顯示的與整形進行轉換,顯示的轉換會在執行時檢測數值範圍,如果範圍不匹配會引發異常,列舉型別至少要有乙個成員。
預設從0開始,注:不能與整型進行隱式的轉換。
enum主要描述產品是否用過(new,used)
enum productcondition
案例:
該例項結合struct和enum,生成struct物件,在生成struct物件的過程中使用enum型別:
pragma solidity ^0.4.13;
contract store
enum productcondition
function getproductcondition() public pure returns (productcondition)
}
從這個例項可以看出,如果構建product結構體傳入productcondition.used則返回1,productcondition.new返回0
Solidity語言學習筆記 34 繼承
pragma solidity 0.4.16 contract owned address owner 使用 is 繼承另乙個合約。子合約可以訪問所有非私有成員,包括 內部函式和狀態變數。不過,不能通過 this 來外部訪問這些。contract mortal is owned 這些抽象合約僅用於建...
Solidity語言學習筆記 39 獨立彙編
從組合語言轉為位元組碼應該盡可能的少坑。控制流應該容易檢測來幫助進行形式驗證與優化。pragma solidity 0.4.16 contract c default memory allocator function allocate size pos the contract function ...
C語言學習(三)
程式的模組化設計 程式設計練習 課外話 挫折是人生的常態,在我們遭遇疫情,不應一味放大痛苦讓其充塞心靈。我們要學會調適心弦,坦然面對,全國人民團結一致,就一定會戰勝疫情。祖國加油 武漢加油 你的答案 陣列程式的模組化設計 所謂陣列,是有序的元素序列。1 若將有限個型別相同的變數的集合命名,那麼這個名...