Aufgabe Zeiger
-
Hallo
double *pv, v[5] = { 5.5, 4.4, 3.3, 2.2, 1.1 };
for(pv = v + 4; pv >= v; pv--)
*pv *= 2;Wie oft wird diese schleifenrumpf durchlaufen??
Kurze erläuterung wäre echt nett!!
Gruß
-
5 mal - teste es doch aus, das ist immer gut.
Jedes element von v wird mit 2 multipliziert und danach wieder zurück geschrieben.
-
Undefiniertes Verhalten. Nach pv == v ist ein weiteres Dekrementieren nicht zulässig.
-
Dekrementieren ist zulässig.
Dereferenzieren ist nicht zulässig.
Der ungültige Zeiger wird nicht dereferenziert ...
-
Kenner des Verhaltens schrieb:
Dekrementieren ist zulässig.
Dereferenzieren ist nicht zulässig.
Der ungültige Zeiger wird nicht dereferenziert ...5.3.2/2 -> 5.17/7 -> 5.7/5 letzter Satz:
If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.