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.