• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天下

            記錄修行的印記

            C語言實現有限狀態機

            C語言實現有限狀態機

            有限狀態機(finite state machine)是一個數學概念,如果把它運用于程序中,可以發揮很大的作用。它是一種協議,用于有限數量的子程序(”狀態”)的發展變化。每個子程序進行一些處理并選擇下一種狀態(通常取決于下一段輸入)。

            有限狀態機(FSM)可以用作程序的控制結構。FSM對于那些基于輸入的在幾個不同的可選動作中進行循環的程序尤其合適。投幣售貨機就是FSM的一個好例子。另外一個你可以想到的復雜的例子就是你正在用的東西,想到了嗎?沒錯,就是操作系統。在投幣售貨機的例子中,輸入是硬幣,輸出是待售商品,售貨機有” 接受硬幣”,”選擇商品”,”發送商品”和”找零錢”等幾種狀態。

            它的基本思路是用一張表保存所有可能的狀態,并列出進入每個狀態時可能執行的所有動作,其中最后一個動作就是計算(通常在當前狀態和下一次輸入字符的基礎上,另外再經過一次表查詢)下一個應該進入的狀態。你從一個”初始狀態” 開始。在這一過程中,翻譯表可能告訴你進入了一個錯誤狀態,直到到達結束狀態。

            在C語言中,有好幾種方法可以用來表達FSM,但它們絕大多數都是基于函數指針數組。一個函數指針數組可以像下面這樣聲明:

            void (*state[MAX_STATES]) ();

            如果知道了函數名,就可以像下面這樣對數組進行初始化。

            extern int a(),b(),c(),d();
            int (*state[]) ()={a,b,c,c};

            可以通過數組中的指針來調用函數:
            (
            *state[i]) ();

            所有函數必須接受同樣的參數,并返回同種類型的返回值(除非你把數組元素做成一個聯合)。函數指針是很有趣的。注意,我們可以去掉指針形式,把上面的調用寫成:

            state[i] ();

            甚至
            (
            ***state[i]) ();

            這是一個在ANSI C中流行的不良方法:調用函數和通過指針調用函數(或任意層次的指針間接引用)可以使用同一種語法。

            如果你想干得漂亮一點,可以讓狀態函數返回一個指向通用后續函數的指針,并把它轉換為適當的類型。這樣,就不需要全局變量了。如果你不想搞得太花哨,可以使用一個switch語句作為一種簡樸的狀態機,方法是賦值給控制變量并把switch語句放在循環內部。關于FSM還有最后一點需要說明:如果你的狀態函數看上去需要多個不同的參數,可以考慮使用一個參數計數器和一個字符串指針數組,就像main函數的參數一樣。我們熟悉的int argc,
            char *argv[]機制是非常普遍的,可以成功地應用在你所定義的函數中

            posted on 2013-03-04 18:00 天下 閱讀(1594) 評論(0)  編輯 收藏 引用 所屬分類: C/C++C++必殺技法

            <2012年2月>
            2930311234
            567891011
            12131415161718
            19202122232425
            26272829123
            45678910

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            人妻无码久久精品| 久久久99精品成人片中文字幕| 久久精品国产亚洲5555| 久久久久亚洲AV成人网人人网站| 久久这里只有精品视频99| 久久综合鬼色88久久精品综合自在自线噜噜| 久久99热这里只有精品国产| 一本久久综合亚洲鲁鲁五月天| 人妻无码精品久久亚瑟影视| 久久国产亚洲精品无码| 久久青青草原精品国产不卡| 五月丁香综合激情六月久久| 激情久久久久久久久久| 婷婷五月深深久久精品| 久久精品国产WWW456C0M| 亚洲国产另类久久久精品| 99久久精品免费国产大片| 无码精品久久久天天影视| 精品乱码久久久久久夜夜嗨| 麻豆亚洲AV永久无码精品久久| 久久99精品国产麻豆不卡| 国产精品对白刺激久久久| 亚洲va久久久久| 久久久久国产一级毛片高清板| www久久久天天com| 亚洲精品乱码久久久久久蜜桃不卡 | 99久久精品国产一区二区| 久久精品国产精品青草| 亚洲∧v久久久无码精品| 国产精品久久久久久五月尺| 久久天天躁狠狠躁夜夜不卡| 91精品国产色综久久| 狠狠狠色丁香婷婷综合久久五月| 久久精品免费全国观看国产| 久久亚洲国产精品123区| 九九久久精品国产| 国产成人精品久久一区二区三区av | 久久久久久久99精品免费观看| 伊人久久无码中文字幕| 一本一道久久综合狠狠老| 国产aⅴ激情无码久久|