新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于C語言的static 又漲姿勢了

關(guān)于C語言的static 又漲姿勢了

作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
最近學(xué)習(xí)一段代碼,關(guān)于求平均值過濾的,過去使用時(shí),一般是這樣算,先一下子讀出10個(gè)值來,求和再除以10,然后返回平均值。

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

本文引用地址:http://m.butianyuan.cn/article/201611/322291.htm

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

這種方法的代碼實(shí)現(xiàn)如下‘

/*******************************************************************************
* 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 后邊的不會(huì)執(zhí)行,后來我錯(cuò)了。

static有一個(gè)特點(diǎn)

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

using namespace std;

void staticLocalVar()
{
static int a = 0; // 運(yùn)行期時(shí)初始化一次, 下次再調(diào)用時(shí), 不進(jìn)行初始化工作
cout<<"a="<++a;
}

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




關(guān)鍵詞: C語言stati

評(píng)論


技術(shù)專區(qū)

關(guān)閉