scanf
eine Adresse (Zeiger) ein Wert annimmt, teilt der Formatbezeich was für Zeiger.
scanf("%d", (arr + i))
bedeutet, dass Sie scanf
die Adresse arr
plus einem Offset von i
,
geben, wenn Sie *arr = 10;
schreiben Sie es auch als *(arr + 0) = 10;
schreiben kann, so sind Sie de Referenzierung den Wert und es 10 mit anderen Worten die Zuordnung Sie kann dies nicht scanf
geben, da es einen Zeiger will.
so
arr = malloc(10*sizeof(int));
+---+---+---+---+---+---+---+---+---+---+
arr ->|0 | | | | | | | | | 9 |
+---+---+---+---+---+---+---+---+---+---+
arr + i ist eine Adresse im Bereich 0..9, de-Referenzierung Wert im Array schreiben Sie *(a+i)
aber
arr = malloc(sizeof(int));
+---+
arr ->| |
+---+
Schreiben *ar
r Sie denentieren den von Ihnen zugewiesenen Wert
*arr = 10;
+---+
arr ->| 10|
+---+
jedoch
Schreiben
scanf("%d", arr);
ist seit arr fein ist ein Zeiger, der auf eine ganze Zahl und Punkte Scanf nimmt einen Zeiger.
Ich sehe kein Array hier. Wenn ein Zeiger ein Array wäre, würde es nicht "Zeiger", sondern "Array" genannt (und umgekehrt). – Olaf
In Ihrem letzten scanf-Beispiel deneferenzieren Sie den Zeiger, während scanf eine Adresse (Zeiger) erwartet. –
Ein Array kann eine Variable sein. OP verwendet hier keine Arrays. – chux