关闭@1x
香港:2025-03-26 23:51:27
  • 紐約:2025-03-26 10:51:27
  • 倫敦:2025-03-26 15:51:27
  • 東京:2025-03-27 00:51:27
  • 悉尼:2025-03-27 01:51:27
  • 香港:2025-03-26 23:51:27
  • 新加坡:2025-03-26 23:51:27
首頁> 資訊> 最新 >正文

【0基礎學Mql4 EA編程2-4】數據結構 - 結構體

William 2024-05-17 17:40:14 關注
認識MQL4數據結構中的-結構體,學習單一結構體和複合結構體的應用

文章來源:123财經導航

作者:william


結構體的概念

MQL4編程語言中的結構體(Struct)是一種自定義數據類型,用于組合不同類型的變量成員,以表示一個更複雜的數據結構。它可以包含不同的數據類型,如整數、浮點數、字符、字符串等,并允許我們将這些變量打包在一個單獨的實體中。

  • 實例:實例是根據結構體定義創建的具體對象。當我們定義一個結構體時,實際上定義了一種數據類型,它描述了結構體的組成成員和布局。然而,隻有在我們根據結構體定義創建一個實例時,才會在内存中分配空間來存儲該實例的數據。

  • 成員變量:成員變量是結構體内部定義的變量,用于存儲結構體的數據。它們是結構體的組成部分,表示結構體的特定屬性或特征。成員變量可以是不同的數據類型,例如整數、浮點數、字符串等。每個實例都擁有自己獨立的一組成員變量,并且可以通過實例來訪問和修改這些變量的值。
    在(第一單元)第3小節當中,我們講到了變量的分類,全局變量與局部變量,今天我們接觸到的結構體中的“成員變量”,它相對結構體來說是局部變量,因爲它隻在穿件實例後生效;但是他能通過在全局作用域中創建實例來達到全局訪問的變量的效果,也就是可以在程序的任何位置訪問它。

  • 成員變量初始化
    成員變量的初始化和普通變量沒有區别,可以直參考之前的文章。


結構體分類

  • 單一結構體:隻有一個實例的結構體。也就是說,該結構體在内存中隻占用了一個實例的空間。單一結構體通常用于表示單個獨立的實體或數據對象。例如,一個表示學生的結構體,它隻包含一個學生的信息,如姓名、年齡和成績。

  • 複合結構體:擁有多個實例的結構體。複合結構體将多個結構體實例組合在一起,形成一個更複雜的數據結構。這些結構體實例可以相互關聯,共同描述一個更大範圍的實體或數據集合。例如,一個表示班級的結構體,它包含多個學生的信息,每個學生的信息由一個單獨的學生結構體表示。在程序中,您可以創建多個學生結構體實例,并将它們組合成一個班級結構體實例,以便表示整個班級的信息。

    在這段代碼中,Trade 是結構體的名稱。它定義了一個名爲 Trade 的結構體,該結構體包含了 int 類型的成員變量 a,double 類型的成員變量 b,以及 string 類型的成員變量 c。然後,通過使用該結構體創建了多個實例。
    在這個例子中,有三個實例:
    order[ ] 是一個數組:用于存儲多個 Trade 結構體的實例。意味着可以創建多個 Trade 類型的對象,并将它們存儲在 order 數組中。數組的大小可以根據需要進行定義。
    add 是一個單獨的 Trade 結構體實例,用于存儲和操作 Trade 結構體中定義的成員變量。
    mode 是另一個單獨的 Trade 結構體實例。它也是通過使用結構體定義創建的一個對象,具有結構體中定義的成員變量。

可能學到這裏你會覺得一頭霧水,下面我通過一張圖來解釋複合型結構體的構造。

  • 結構體由于關鍵字struct聲明,包含一個名稱和另外兩個花括号 { }圈定作用域,以分割符結束整個結構體的聲明。
  • 實例創建部分包含3個獨立的實例,每個實例都能夠直接操作其成員。
  • 重點來了:每個實例都有自己的一組成員變量,并且對一個實例的成員變量的修改不會影響其他實例的對應成員變量的值。每個實例都擁有獨立的存儲空間,因此它們的成員變量是相對獨立的。

結構體的應用

1、聲明一個結構體。昨天案例中的數組我們先保留,之後我們還需要用到。

2、繼續上一節當中的初始化操作,提前爲結構體的使用做準備、

3、調用和賦值成員變量也非常簡單,

  • ArrayResize(data, 0);:這行代碼将 data 數組的大小設置爲 0,相當于清空了整個data實例數組中的元素。
  • ArrayResize(data, ArraySize(symbol));:這行代碼将 data 數組的大小設置爲 symbol 數組的大小,實現了将 data 數組的容量克隆爲 symbol 數組的大小。

4、用常見的手法再對其餘的實例成員變量進行初始化操作。
for(int i=0;i<ArraySize(data);i++):這是一個循環語句,用于遍曆 data 數組的每個元素。
data[i].sym = symbol[i];:将 data 數組的第 i 個元素的 sym 成員變量設置爲 symbol 數組的第 i 個元素。等同于克隆元素了。

進行一系列賦值操作來填充data實例數組後,我們單獨爲add實例賦值,注意這裏add實例按照其成員變量來計算也隻有三個變量。
add.sym = "3X symbol";:将 add 結構體的 sym 成員變量設置爲字符串 "3X symbol"。
add.bid += data[i].bid;:累加data[i].bid成員的值。
add.ask += data[i].ask;:累加data[i].ask成員的值。
提示:
在成員數量上是按照其實例類型決定的,數組實例的成員大小=單個成員的大小x成員數量;普通成員的大小=成員數量;通俗了講你聲明數組實例時,有幾個成員就有幾個數組,每一個成員都是一個獨立的數組;同理普通實例有幾個成員就有幾個變量

5、本章節中我們使用了一組封裝的圖形對象來輸出到圖表,相關知識我們後期再延伸。

本節知識總結

結構體分爲單一結構體和複合結構體,結構體可以通過定義不同的實例來達到結構複用,簡化代碼的目的。
單一結構體或是複合結構體的賦值操作和普通數組、變量基本相似,用xxx.xxx的格式來操作實例對應的成員。

【免責聲明】123财經導航所發布的信息内容僅供交易投資者參考,并不構成投資建議“據此操作,風險自擔”。網站上部分信息内容及圖片來自于網絡/注冊作者/投稿人,版權歸原作者所有,如有侵權,請您與我們聯系關閉,郵箱:938123@qq.com。
hhhhhhh
热门评论
最新评论
还没有评论快来抢沙发吧!
第三方賬号登錄
第三方賬号登錄
第三方賬号登錄
  • *站點:
  • *網址:
  • 類型:
  • 聯系方式:
  • 簡介:

  • RRH123歡迎您的加入!如有問題請添加咨詢管理員【微信号:938123】
  • *類型:
  • *問題:
  • 圖片說明:
  • 聯系方式:

  • RRH123感謝您的反饋!如有問題請添加咨詢管理員【微信号:938123】