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; }