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

來(lái)自ALSROBOT WiKi
跳轉(zhuǎn)至: 導(dǎo)航、 搜索

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

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

/* RandomWalk
* Paul Badger 2007
* RandomWalk函數(shù)在兩個(gè)終點(diǎn)間隨機(jī)的上下移動(dòng)
* 在一個(gè)循環(huán)中最大的移動(dòng)由參數(shù)“stepsize”決定
*一個(gè)靜態(tài)變量向上和向下移動(dòng)一個(gè)隨機(jī)量
*這種技術(shù)也被叫做“粉紅噪聲”或“醉步”
*/
 
#define randomWalkLowRange -20
#define randomWalkHighRange 20
 
int stepsize;
 
INT thisTime;
int total;
 
void setup()
{
     Serial.begin(9600);
}
 
void loop()
{        //  測(cè)試randomWalk 函數(shù)
  stepsize = 5;
  thisTime = randomWalk(stepsize);
serial.println(thisTime);
   delay(10);
}
 
int randomWalk(int moveSize){
  static int  place;     // 在randomwalk中存儲(chǔ)變量
                         // 聲明為靜態(tài)因此它在函數(shù)調(diào)用之間能保持?jǐn)?shù)據(jù),但其他函數(shù)無(wú)法改變它的值
 
  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)樨?fù)方向
}
 
  return place;
}