您的位置 首页 IOT

关于C言语的static 又涨姿态了

最近学习一段代码,关于求平均值过滤的,过去使用时,一般是这样算,先一下子读出10个值来,求和再除以10,然后返回平均值。今天学到了一种

最近学习一段代码,关于求平均值过滤的,曩昔使用时,一般是这样算,先一会儿读出10个值来,求和再除以10,然后回来平均值。

今日学到了一种新的求平均值法,不必一会儿读出10个来,而是正常读,只不过是曾经读的都会记载保存下来,然后经过移位来更新这10个数据,

简略来说 假如 收集的数据为(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局部变量的”回忆性”与生存期的”全局性”
所谓”回忆性”是指在两次函数调用时, 在第2次调用进入时, 能坚持第一次调用退出时的值.
示例程序一
#include

using namespace std;

void staticLocalVar()
{
static int a = 0; // 运行期时初始化一次, 下次再调用时, 不进行初始化作业
cout<<"a="<++a;
}

int main()
{
staticLocalVar(); // 第一次调用, 输出a=0
staticLocalVar(); // 第2次调用, 回忆了第一次退出时的值, 输出a=1
return 0;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/257178.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部