Η λέξη-κλειδί στατικός χρησιμοποιείται για τη δημιουργία μεταβλητών οι οποίες είναι ορατές μόνο σε μια συνάρτηση. Ωστόσο, σε αντίθεση με τις τοπικές μεταβλητές που δημιουργούνται και καταστρέφονται κάθε φορά που καλείται μια συνάρτηση, οι στατικές μεταβλητές εξακολουθούν να υπάρχουν ακόμα και μετά από την κλήση της συνάρτησης. Έτσι μπορούν να διατηρήσουν τα δεδομένα τους, ανάμεσα σε κλήσεις της συνάρτησης.

Οι μεταβλητές που έχουν δηλωθεί ως στατικές, θα δημιουργηθούν και θα αρχικοποιηθούν μόνο την πρώτη φορά που καλείται μια συνάρτηση.

Παράδειγμα

/* RandomWalk
* Paul Badger 2007
* RandomWalk wanders up and down randomly between two
* endpoints. The maximum move in one loop is governed by
* the parameter "stepsize".
* A static variable is moved up and down a random amount.
* This technique is also known as "pink noise" and "drunken walk".
*/

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

int thisTime;
int total;

void setup()
{
  Serial.begin(9600);
}

void loop()
{        //  tetst randomWalk function
  stepsize = 5;
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
   delay(10);
}

int randomWalk(int moveSize){
  static int  place;     // variable to store value in random walk - declared static so that it stores
                         // values in between function calls, but no other functions can change its value

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

  if (place < randomWalkLowRange){ // check lower and upper limits place = place + (randomWalkLowRange - place); // reflect number back in positive direction } else if(place > randomWalkHighRange){
    place = place - (place - randomWalkHighRange);     // reflect number back in negative direction
  }

  return place;
}

Επιστροφή στην σελίδα Παραπομπές Γλώσσας