關(guān)于C語言的static 又漲姿勢了
今天學(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;
}
評(píng)論