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.