新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于C語言的static 又漲姿勢了

        關于C語言的static 又漲姿勢了

        作者: 時間:2016-11-27 來源:網絡 收藏
        最近學習一段代碼,關于求平均值過濾的,過去使用時,一般是這樣算,先一下子讀出10個值來,求和再除以10,然后返回平均值。

        今天學到了一種新的求平均值法,不用一下子讀出10個來,而是正常讀,只不過是以前讀的都會記錄保存下來,然后通過移位來更新這10個數據,

        本文引用地址:http://www.104case.com/article/201611/322291.htm

        簡單來說 如果 采集的數據為(2.0,2.1,2.5,2.3,2.5,2.2,2.5,2.6,5.9,2.7),那么下次采集為 2.5,那么就會將2.0丟掉,2.1為第一位,依次移位實現數據的更新。感覺巧妙之級。

        這種方法的代碼實現如下‘

        /*******************************************************************************
        * Function Name : static int _filter(int m)
        * Description :
        * Input :
        * Output : None
        * Return :
        * Attention : None
        *******************************************************************************/
        static int _filter(int m)
        {
        static int flag_first = 0, _buff[10], sum;
        const int _buff_max = 10;
        int i;

        if(flag_first == 0)
        {
        flag_first = 1;

        for(i = 0, sum = 0; i < _buff_max; i++)
        {
        _buff[i] = m;
        sum += _buff[i];
        }
        return m;
        }
        else
        {
        sum -= _buff[0];
        for(i = 0; i < (_buff_max - 1); i++)
        {
        _buff[i] = _buff[i + 1];
        }
        _buff[9] = m;
        sum += _buff[9];

        i = sum / 10.0;
        return i;
        }
        }

        一開始以為 else 后邊的不會執行,后來我錯了。

        static有一個特點

        特點: static局部變量的”記憶性”與生存期的”全局性”
        所謂”記憶性”是指在兩次函數調用時, 在第二次調用進入時, 能保持第一次調用退出時的值.
        示例程序一
        #include

        using namespace std;

        void staticLocalVar()
        {
        static int a = 0; // 運行期時初始化一次, 下次再調用時, 不進行初始化工作
        cout<<"a="<++a;
        }

        int main()
        {
        staticLocalVar(); // 第一次調用, 輸出a=0
        staticLocalVar(); // 第二次調用, 記憶了第一次退出時的值, 輸出a=1
        return 0;
        }




        關鍵詞: C語言stati

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 莲花县| 会同县| 扎鲁特旗| 九江市| 饶阳县| 通许县| 嵊泗县| 宜阳县| 吉首市| 凭祥市| 南郑县| 曲周县| 孟村| 天津市| 麦盖提县| 河津市| 民丰县| 韩城市| 防城港市| 长沙县| 安平县| 旺苍县| 大冶市| 容城县| 雅江县| 许昌县| 新营市| 双峰县| 庆城县| 浪卡子县| 宜兴市| 江孜县| 抚宁县| 顺昌县| 新化县| 毕节市| 天水市| 读书| 宣化县| 正蓝旗| 峨山|