lehrkraefte:blc:informatik:ffprg2-2020:esp32-arrays

Arrays in C++

Arrays in C++ sind nicht so flexibel wie in Python. Z.B. müssen alle Einträge von gleichen Typ sein. Die Grösse wird einmal festgelegt und kann nicht mehr verändert werden (ausser man legt ein neues, grösseres Array an und kopiert die Daten).

// statisch mit Initialisierung (Grösse automatisch)
int ledPins[] = {18,19,21,22,23};
int numLeds = sizeof(ledPins)/sizeof(int); // Anzahl Elemente in ledPins
 
int counters[5];  // Platz für 5 int
 
int *mydata;  // Noch keine Elemente, nur Platz für einen Pointer (Speicheradresse)
int *moredata;
 
 
void setup() {
  Serial.begin(115200);
  delay(200);
 
  Serial.printf("Es gibt %d ledPins!\n", numLeds);
  counters[0] = 3;
  Serial.printf("counters[0]=%d, counters[1]=%d (könnte irgendwas sein)\n", counters[0], counters[1]);
 
  mydata = new int[7];  // Neues Array mit 7 Elementen
 
  moredata = new int[10];
 
  moredata[0] = 42;
 
  // Ein bisschen Hacking: Pointer-Arithmetik
  Serial.printf("Adresse von counters: %p, Adresse von mydata: %p, Adresse von moredata %p, Differenz: %d\n", counters, mydata, moredata, (int)(moredata-mydata));
  Serial.printf("moredata[0]=%d\n", moredata[0]);
 
  mydata[11]=23;  // Das darf man doch nicht!
 
  Serial.printf("moredata[0]=%d\n", moredata[0]);  // WTF?
 
  delete[] mydata;   // Gaaanz wichtig! Array wieder löschen, sonst kann es Speicherprobleme geben.
  delete[] moredata;
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}
  • lehrkraefte/blc/informatik/ffprg2-2020/esp32-arrays.txt
  • Last modified: 2020/08/21 15:47
  • by Ivo Blöchliger