static

Описание

Ключевое слово

static

используется для создания переменных, которые видны только одной функции. Однако, в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, статические переменные сохраняются после вызова функции, сохраняя свои данные между вызовами функции.

Переменные, объявленные как static, будут создаваться и инициализироваться только при первом вызове функции.

Пример кода

/* RandomWalk
  Paul Badger 2007
  RandomWalk случайно блуждает вверх и вниз между двумя
  конечными точками. Максимальное движение в одном цикле управляется
  параметром "stepsize".
  Статическая переменная перемещается вверх и вниз на случайную величину.
  Эта техника также известна как "розовый шум" и "пьяная походка".
*/

#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;

int thisTime;

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; // переменная для хранения значения в случайном блуждании — объявлена static, чтобы хранила
  // значения между вызовами функции, но никакие другие функции не могут изменить её значение

  place = place + (random(-moveSize, moveSize + 1));

  if (place < randomWalkLowRange) {                               // проверяем нижний и верхний пределы
    place = randomWalkLowRange + (randomWalkLowRange - place);    // отражаем число обратно в положительном направлении
  }
  else if (place > randomWalkHighRange) {
    place = randomWalkHighRange - (place - randomWalkHighRange);  // отражаем число обратно в отрицательном направлении
  }

  return place;
}

Смотрите также