static

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

Siehe Auch

Please note: These are affiliate links. If you buy the components through these links, We may get a commission at no extra cost to you. We appreciate it.