Static (靜態(tài)變量)

來自ALSROBOT WiKi
跳轉至: 導航搜索

static關鍵字用于創(chuàng)建只對某一函數(shù)可見的變量。然而,和局部變量不同的是,局部變量在每次調用函數(shù)時都會被創(chuàng)建和銷毀,靜態(tài)變量在函數(shù)調用后仍然保持著原來的數(shù)據(jù)。

靜態(tài)變量只會在函數(shù)第一次調用的時候被創(chuàng)建和初始化。
例子

/* RandomWalk
* Paul Badger 2007
* RandomWalk函數(shù)在兩個終點間隨機的上下移動
* 在一個循環(huán)中最大的移動由參數(shù)“stepsize”決定
*一個靜態(tài)變量向上和向下移動一個隨機量
*這種技術也被叫做“粉紅噪聲”或“醉步”
*/
 
#define randomWalkLowRange -20
#define randomWalkHighRange 20
 
int stepsize;
 
INT thisTime;
int total;
 
void setup()
{
     Serial.begin(9600);
}
 
void loop()
{        //  測試randomWalk 函數(shù)
  stepsize = 5;
  thisTime = randomWalk(stepsize);
serial.println(thisTime);
   delay(10);
}
 
int randomWalk(int moveSize){
  static int  place;     // 在randomwalk中存儲變量
                         // 聲明為靜態(tài)因此它在函數(shù)調用之間能保持數(shù)據(jù),但其他函數(shù)無法改變它的值
 
  place = place + (random(-moveSize, moveSize + 1));
 
  if (place < randomWalkLowRange){                    //檢查上下限
    place = place + (randomWalkLowRange - place);     // 將數(shù)字變?yōu)檎较?}
  else if(place > randomWalkHighRange){
    place = place - (place - randomWalkHighRange);     // 將數(shù)字變?yōu)樨摲较?}
 
  return place;
}