摘自:https://blog.csdn.net/Kendiv/article/details/675941
关于static的 ""记忆性""
我们可以用做按键的检测,,,因为按键要有除颤消抖过程
示例程序一
#include <iostream>using namespace std;
void staticLocalVar()
{ static int a = 0; // 运行期时初始化一次, 下次再调用时, 不进行初始化工作 cout<<"a="<<a<<endl; ++a;}int main()
{ staticLocalVar(); // 第一次调用, 输出a=0 staticLocalVar(); // 第二次调用, 记忆了第一次退出时的值, 输出a=1 return 0;}
1. “记忆性”, 程序运行很重要的一点就是可重复性, 而static变量的”记忆性”破坏了这种可重复性, 造成不同时刻至运行的结果可能不同.
2. “生存期”全局性和唯一性. 普通的local变量的存储空间分配在stack上, 因此每次调用函数时, 分配的空间都可能不一样, 而static具有全局唯一性的特点, 每次调用时, 都指向同一块内存, 这就造成一个很重要的问题 ---- 不可重入性!!!这样在多线程程序设计或递归程序设计中, 要特别注意这个问题.
上面提到用静态的记忆性,可以编写按键的消抖程序.
关于静态的记忆性,让我想到一个点子,可以化简程序的:
比如一个程序要播放SD卡里的声音,,SD卡里有各种规格的wav文件,,,虽然都是wav文件,但是每种类型是不一样的...
有16位的wav;有8位的wav; 假设我们只知道SD卡里是wav却不知道是哪种规格的,,所以,我们就需要写程序把wav头文件读进来
然后分别去判断,,,,,,每次播放一个段音乐,我们就要判断一次,,,这样是不是很麻烦,,
既然静态有记忆作用,,,我们就让程序走一遍,,只判断一次,,然后记住这个选择,,,之后就不用再次循环判断了
//
//还有另一种情况,SD卡里有各种各样的音乐,,,每种音乐对应不同的解码算法,,,,在我们切换音乐的时候
需要判断要用那种算法,,之后再播这首曲子的整个过程中就没必要来回判断了,,,我们可以用静态记录算法是哪个
只有切换曲子的时候再次修改静态中记录的算法即可