这里会显示出您选择的修订版和当前版本之间的差别。
前一修订版 | |||
— | reference:language:static [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== Static ====== | ||
+ | |||
+ | static关键字用于创建只对某一函数可见的变量。然而,和局部变量不同的是,局部变量在每次调用函数时都会被创建和销毁,静态变量在函数调用后仍然保持着原来的数据。 | ||
+ | |||
+ | 静态变量只会在函数第一次调用的时候被创建和初始化。 | ||
+ | ===== 例子 ===== | ||
+ | <code cpp> | ||
+ | /* RandomWalk | ||
+ | * Paul Badger 2007 | ||
+ | * RandomWalk函数在两个终点间随机的上下移动 | ||
+ | * 在一个循环中最大的移动由参数“stepsize”决定 | ||
+ | *一个静态变量向上和向下移动一个随机量 | ||
+ | *这种技术也被叫做“粉红噪声”或“醉步” | ||
+ | */ | ||
+ | |||
+ | #define randomWalkLowRange -20 | ||
+ | #define randomWalkHighRange 20 | ||
+ | |||
+ | int stepsize; | ||
+ | |||
+ | INT thisTime; | ||
+ | int total; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { // 测试randomWalk 函数 | ||
+ | stepsize = 5; | ||
+ | thisTime = randomWalk(stepsize); | ||
+ | serial.println(thisTime); | ||
+ | | ||
+ | } | ||
+ | |||
+ | int randomWalk(int moveSize){ | ||
+ | static int place; | ||
+ | // 声明为静态因此它在函数调用之间能保持数据,但其他函数无法改变它的值 | ||
+ | |||
+ | place = place + (random(-moveSize, | ||
+ | |||
+ | if (place < randomWalkLowRange){ | ||
+ | place = place + (randomWalkLowRange - place); | ||
+ | } | ||
+ | else if(place > randomWalkHighRange){ | ||
+ | place = place - (place - randomWalkHighRange); | ||
+ | } | ||
+ | |||
+ | return place; | ||
+ | } | ||
+ | </ | ||