Static

函式中用 static 宣告的变数只能在该函式中被使用,但它不像一般区域变数,每当函式被呼叫时,就会被重新创建然后随着函式执行完毕后就会被释放,静态变数的存在不受函式的呼叫与否影响,变数的值在每次呼叫完函式之后继续被保留。

变数只能在第一次呼叫函式时被宣告为静态变数并给定型别、初值。

范例

/* RandomWalk
* Paul Badger 2007
* RandomWalk 执行一个随机漫步在两个端点之间的动作,
* 最大的移动量由loop函式中的参数 ”stepsize” 决定,
* 一个表示位置的静态变数会被上下移动一个随机的移动量;
* 这种技术也被称为 "pink noise" 或 "drunken walk"。
*/

#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; // 在 randomWalk 中储存位置数值的变数
              // 宣告为静态才能在两次的函式呼叫间保留之前的数值,但该数值却不会被其他函式修改。

  place = place + (random(-moveSize, moveSize + 1));

  if (place < randomWalkLowRange){                    // 确认位置的最大和最小极限值
    place = place + (randomWalkLowRange - place);     // 越界后往正方向返回
  }
  else if(place > randomWalkHighRange){
    place = place - (place - randomWalkHighRange);     // 越界后往负方向返回
  }

  return place;
}

语法参考主页面

本页由热血青年 LBU 译自英文版。

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.