Solidity語言學習筆記————15、結構體Struct
自定義結構體
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
}
Person
就是我們自定義的一個新的結構體型別,結構體裡面可以存放任意型別的值。
怎麼理解結構體:如果我們要描述一個人,需要說明他的姓名、年齡、性別、身高等方面,如果每新增一個人就要寫一遍name=“zhangshan”,age=28。。。太過麻煩,可以把這些描述的各個變數整合為一個結構體,呼叫這個結構體就意味著要新增一個人進去
陣列,對映,結構體也支援自定義的結構體。我們來看一個自定義結構體的例子:
pragma solidity ^0.4.0;
contract SimpleStruct{
//學生
struct Student{
string name;
int num;
}
//班級
struct Class{
string clsName;
//學生的列表
Student[] students;
mapping(string=>Student)index;
}
}
在上面的程式碼中,我們定義了一個簡單的結構體Student
,它包含一些基本的資料型別。另外我們還定義了一個稍微複雜一點的結構體Class
Student
,以及陣列,對映等型別。Student[ ] students說明結構體可以看成是一個值型別,用法和uint等型別差不多。陣列型別的students
和對映型別的index
的宣告中還使用了結構體。
初始化一個結構體
- 方法一
pragma solidity ^0.4.4; contract Students { struct Person { uint age; uint stuID; string name; } #括號內的引數和結構體內的變數一一對應,等同於age=18,stuID=101,name="james" Person _person = Person(18,101,"james"); Person jack=Person(28,102,"jack"); }
- 方法二
pragma solidity ^0.4.4;
contract Students {
struct Person {
uint age;
uint stuID;
string name;
}
#相比方法一,這一個更清晰但需要多輸入三個變數的名字,輸入順序可以改變,自己取捨
Person _person = Person({age:18,stuID:101,name:"james"});
}
結構體的可見性:
關於可見性,目前只支援internal,所以結構體只能在合約內部和子合約內使用。包含結構體的函式必須顯性宣告為internal
例子:
pragma solidity ^0.4.0;
contract A{
struct S{
string para1;
int para2;
}
//這個函式的引數型別是上面定義的結構體S,因此需要顯性宣告為internal
function f(S s) internal{
//...
}
function f1(){
//當前類中使用結構體
S memory s = S("Test", 10);
f(s);
}
}
contract B is A{
function g(){
//子合約中使用結構體
S memory s = S("Test", 10);
//呼叫父類方法
f(s);
}
}
在上面的程式碼中,我們聲明瞭f(S s)
,由於它包含了struct
的S
,所以不對外可見,需要標記為internal
。你可以在當前類中使用它,如f1()
所示,你還可以在子合約中使用函式和結構體,如B
合約的g()
方法所示。
相關推薦
Solidity語言學習筆記————15、結構體Struct
自定義結構體pragma solidity ^0.4.4; contract Students { struct Person { uint age; uint stuID; string name; }
Go語言學習筆記(十三)之結構體struct
19.面對物件1之struct結構體 Go中面向物件是通過struct來實現,struct是使用者自定義的型別,首先需要定義struct 1: type User struct { 2: Username string 3: Sex string 4: Age int 5: Av
Solidity語言學習筆記————7、單位和全域性變數
貨幣單位(Ether Units)wei,finney,szabo或ether可以在Solidity中作為貨幣單位並可以進行相互轉換。沒有單位的數字預設是Wei。單位之間的轉化規則如下:1 ether == 10^3 finney1 ether == 10^6 szabo1
學習筆記1-goland結構體(struct)
寫在前面:若有侵權,請發郵件[email protected]告知。 轉載者告知:如果本文被轉載,但凡涉及到侵權相關事宜,轉載者需負責。
C語言(三 字串、結構體、共用體、輸入輸出)
字串 字串是儲存了一些字元,最後以null(’/0’)結尾的一維字元陣列。 char str[6] = {'h','e','l','l','o','/0'}; char str[ ] = "hello" ; 還有一些字串操作函式: 1、strcpy(s1,s2) 複製s2到s1 2
Go語言學習第八課-結構體與包(Go語言的面向物件)
接下來講解一下Go語言中的面向物件思想程式設計。在Go語言面向物件與其它面嚮物件語言有著很大的差別。首先Go語言的不存在繼承和多型,而且不存在建構函式。並且Go語言不採用class來實現類,而是採用結構體加指標實現。不得不說,這讓類的定義變得很複雜,但是又不失合理
R語言學習筆記(概念、公式及R函式)
1、隨機實驗:可在相同2、隨機事件均值u:這個很好理解 R函式:mean中位數:對序列排序後,排在中間的數,需要特別注意的是如果序列為偶數,中位數是中間兩個數平均值. R函式:median百分位數:也是順序統計量,設百分數為p,n是樣本個數,則p位數指:np為小數,ceil
C語言入門(15)——結構體與資料抽象
大多數的計算機運算是對現實世界的模擬,如果想用計算機來模擬現實世界需要用到資料抽象的方法。所謂抽象是從實際的人、物、事和概念中抽取所關心的共同特徵,,忽略非本質的細節,吧這些特徵用各種概念精確的加以描述,從而使這些概念構成某種對現實世界進行描述的模型。下面以數學中的複數為例項
Go語言學習筆記(五)-其他型別(指標、結構體、、)
指標 在Go語言中也存在指標,且指標儲存了變數的地址,初始值為nil。定義指標與定義變數相似,不同的是在型別前面指標需要加*例如: var p *int //此處定義了一個int型別的指標 指標也可以通過已有變數獲取,通過&操作符便可,與C
c語言學習筆記.結構體.
成員訪問運算符 div 成員 bsp tro truct 年齡 可用 語言學 結構體: 一種用戶自定義的可用的數據類型,它允許您存儲不同類型的數據項。 定義/聲明: struct 類型名{ 成員1; 成員2; ... 成員n; } 變量
C語言學習筆記——結構體與共同體
一.資料型別 1.基本資料型別:char、int、short、long、float; 2.指標型別:char*、int*、short*; 3.構造型別:char[ ]、int[ ]、short[ ]; 二.用typedef說明一個新型別 typedef是C語言一
C語言:constkeyword、結構體
data con post -s 標簽 初始化 weight 什麽 聯系 前幾節內容的解說,主要是內存地址及指針的分析。這一節解說一下easy混淆的keywordconstant及結構體的知識。 一、constkeyword 1. 字符常量的指針 char const
go語言的排序、結構體排序
sea 封裝 class 讓其 其他 zhang import 過去 blue 原文:https://studygolang.com/articles/1598 晚上準備動手寫點 go 的程序的時候,想起 go 如何排序的問題。排序 sort 是個基本的操作,當然搜索
C語言學習筆記之字符串拼接的2種方法——strcat、sprintf
fir str return print 文章 %s rst stdlib.h 字符串拼接 本文為原創文章,轉載請標明出處 1. 使用strcat進行字符串拼接 #include <stdio.h> #include <stdlib.h> #incl
Go語言學習筆記(二) 基本語法、變數、常量、型別
基本語法 Go語言中的標記 Go程式是由各種標記組成的,標記可以是關鍵字,識別符號,常量,字串文字或符號。例如,以下Go語句由六個標記組成: fmt.Println("Hello, World!") 每個標記單獨表示為: fmt . Println ( "Hello, World
Go語言學習筆記(一) 簡介、安裝
為什麼選擇Go 程式語言已經非常多,偏效能敏感的編譯型語言有 C、C++、Java、C#、Delphi和Objective-C等,偏快速業務開發的動態解析型語言有PHP、Python、Perl、Ruby、JavaScript和Lua等,面向特定領域的語言有Erlang、R和MATLAB等,
go語言初體驗(流程控制、range遍歷、函式、結構體、面向物件)
一、流程控制 // main package main import ( "fmt" ) func main() { x := 2 switch x { case 1: fmt.Print("beifeng 1") case 2:
go語言初體驗(流程控制、range遍歷、函數、結構體、面向對象)
需要 3.3 fmt float compute 捕獲異常 value 地址 異常處理 一、流程控制 // main package main import ( "fmt" ) func main() { x := 2 switch x {
Solidity 語言學習(2)—— Solidity智慧合約檔案結構
版本申明 pragma solidity ^0.4.0; 說明: 1 版本要高於0.4才可以編譯 2 表示高於0.5的版本則不可編譯,第三位的版本號但可以變,留出來用做bug可以修復(如 0.4.1的編譯器有bug,可在0.4.2 修復,現有合約不用該程式碼)。 引用其他
solidity語言學習(8) —— 表示式和控制結構
輸入引數和輸出引數 和JavaScript一樣,solidity的函式也可以使用引數作為輸入;但與JavaScript和C不同的是,函式可能也會返回任意數量的引數作為輸出 輸入引數 輸入引數宣告的方式和變數是一樣的。但是例外的是,不使用的引數可以省略變數名。比如,假設我們想要我們的合