Peter_2498
Lieutenant
- Registriert
- Apr. 2018
- Beiträge
- 603
C++:
int arr[5] = {1,2,3,4,5};
int *p = arr;
*(p++) = *p + *p++
Ich verstehe nicht genau, nach welchen Regeln ich hier vorgehen muss.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
int arr[5] = {1,2,3,4,5};
int *p = arr;
*(p++) = *p + *p++
Wo soll da eine Schleife sein?Flossen_Gaming schrieb:Sieht für mich nach einer Schleife oder einer Aufzählung aus
Hier sind die Regeln für die Evaluierungsreihenfolge:Peter_2498 schrieb:Ich verstehe nicht genau, nach welchen Regeln ich hier vorgehen muss.
Typische Schul-/Uniaufgaben.=dantE= schrieb:Es wird im erzeugten Array durch Berechnung der Wert "1" im Array durch "3" ersetzt.
Wer macht den sowas? o_O
Unter der annahme das eine expression left to rigth verarbeitet wird. Diese annahme ist falsch.Peter_2498 schrieb:So wie das Array danach aussieht, passiert wohl folgendes:
*p und *p++ evaluieren beide zu eins(das ++ ist ja postfix). Danach wird der Pointer um eine Adresse inkrementiert und zeigt danach auf die zweite Stelle im Array. Dann evaluiert *p(++) zum Element an der zweiten Stelle im Array und überschreibt diesen Wert mit 2 und inkrementiert danach nochmal den Pointer p, sodass er nun auf das dritte Element im Array zeigt, also am Ende ist dann *p = 3.
Ja und nein. Selbst 0x1 ist ja noch gekürzt, denn eigentlich müsste es 0x0000000000000001 heißen, womit dann auch automatisch die 64 bit Architektur geklärt wäre. Aber selbst im virtuellen Speicher einer Anwendung beginnt die main doch nicht an 0x1 auf dem Stack, da kommt doch noch einiges an libc Kram und die #begin oder #start oder wie die bei c hieß...KitKat::new() schrieb:Das ist beides das selbe.
Eigentlich habe ich angenommen, dass es von rechts nach links ausgewertet wird.Multivac schrieb:Unter der annahme das eine expression left to rigth verarbeitet wird. Diese annahme ist falsch.
*p++ ist 1.=dantE= schrieb:Schließlich wird *p und *p++ addiert, was 1 + 2 = 3 ergibt.