说明
static静态变量只对声明该变量的函数有效。静态变量和局部变量不同的是,局部变量在每次调用时都会被创建,在调用结束后被销毁。而静态变量在函数调用后仍然保持着原来的数据。
静态变量只会在函数第一次调用的时候被创建和初始化。
示例程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
/* RandomWalk * Paul Badger 2007 * RandomWalk函数在两个终点间随机的上下移动 * 在一个循环中最大的移动由参数“stepsize”决定 * 一个静态变量向上和向下移动一个随机量 * 这种技术也被叫做“粉红噪声”或“醉步” */ #define randomWalkLowRange -20 #define randomWalkHighRange 20 int stepsize; int thisTime; int total; void setup() { Serial.begin(9600); } void loop() { // 测试randomWalk 函数 stepsize = 5; thisTime = randomWalk(stepsize); Serial.println(thisTime); delay(10); } int randomWalk(int moveSize){ static int place; // place是randomwalk函数的静态变量。 // 它可以在randomwalk函数被调用保持上次调用时的数值。 place = place + (random(-moveSize, moveSize + 1)); if (place < randomWalkLowRange){ // 检查上下限 place = place + (randomWalkLowRange - place); // 将数字变为正方向 } else if(place > randomWalkHighRange){ place = place - (place - randomWalkHighRange); // 将数字变为负方向 } return place; } |