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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
lehrkraefte:blc:informatik:ffprg2-2020:esp32-arrays [2020/08/21 07:54] Ivo Blöchligerlehrkraefte:blc:informatik:ffprg2-2020:esp32-arrays [2020/08/21 13:47] (current) Ivo Blöchliger
Line 1: Line 1:
 +====== 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).
 +
 +<code c++>
 +// 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:
 +
 +}
 +</code>