Diese Seite ist auch in 2 anderen Sprachen verfügbar.
Sprache wechseln  

static

[Data Types]

Beschreibung

Das static-Keywort ermöglicht es, dass Variablen nur für eine Funktion sichtbar sind. Anders als lokale Variablen, die bei jedem Funktionsaufruf neu belegt werden, behalten statische Variablen deren Wert über das Funktionsende hinaus bei.

Statische Variablen werden nur einmal erstellt, wenn die Funktion das erste Mal aufgerufen wird.

Beispielcode

Der Code wandert zufällig zwischen 2 Endpunkten umher.

/* RandomWalk
* Paul Badger 2007
* RandomWalk wandert zufällig zwischen 2 Endpunkten umher.
* Die maximale Bewegug pro Schritt wird über "stepsize" festgelegt.
* Eine statische Variable wird dazu um einen zufälligen Wert hoch- bzw.
* heruntergezählt.
* Das ist auch bekannt als "pink noise" und "drunken walk".
*/

// Definiere die maximale und minimale Beschränkung der Funktion
#define randomWalkLowRange -20
#define randomWalkHighRange 20
// Variable für die Schrittweite pro Durchlauf
int stepsize;
// Variable zur Speicherung des aktuellen Ergebnisses der RandomWalk-Funktion
int thisTime;
int total;

void setup() {
  // Initialisiere die serielle Verbindung
  Serial.begin(9600);
}

void loop() {
  // Initialisiere die Schrittweite
  stepsize = 5;
  // Rufe die randomWalk-Funktion auf und speichere das Ergebnis
  // in der Variable "thisTime"
  thisTime = randomWalk(stepsize);
  // Gib den Wert der Variable "thisTime" aus
  Serial.println(thisTime);
  // Warte 10 ms
  delay(10);
}

int randomWalk(int moveSize) {
  // Variable, um den Wert in der randomWalk-Funktion zu speichern
  // Nur diese Funktion kann den Wert ändern, der Wert ist aber von
  // Aufruf zu Aufruf wieder verfügbar
  static int  place;
  // Zufällige Bewegung
  place = place + (random(-moveSize, moveSize + 1));
  // Check, ob die Limits verletzt wurden
  if (place < randomWalkLowRange) {
	// Korrigiere den aktuellen Schritt in die positive Richtung
    place = randomWalkLowRange + (randomWalkLowRange - place);
  }
  else if(place > randomWalkHighRange) {
	// Korrigiere den aktuellen Schritt in die negative Richtung
    place = randomWalkHighRange - (place - randomWalkHighRange);
  }
  // Gib die neue Position zurück
  return place;
}