hal schrieb:
>
1 | float f = eeprom_read_float( & _test[i] );
|
> kann ich verstehen, aber
>
1 | float f = eeprom_read_float(_test + i);
|
Weil in C die Array-Index Operation in Form von Pointer Arithmetik
definiert ist.
wenn du zu einem Pointer a etwas dazuzählt, dann multipliziert der
Compiler automatisch das i mit der Größe des Basistyps, in deinem Fall
eben der sizeof(float), wenn es dann darum geht auf Assemblerebene den
Zugriff zu machen.
Tatsächlich ist das erste, ws der Compiler macht, wenn du a[i]
schreibst, das er das in die Form *(a+i) umwandelt und erst dann damit
weiter arbeitet.
Dau kannst in C ja auch schreiben
1 | double* p = malloc( 5 * sizeof(double) );
|
2 |
|
3 | p[0] = 2.0;
|
4 | p[1] = 3.0;
|
Genau hier kommt die Pointer Array Dualität zum tragen. Und genau das
ist auch der Grund, warum der Name eines Arrays alleine als die
Startadresse (vulgo Pointer) des Arrays fungiert.
In C kann man Arrays nicht ohne Pointer verstehen und Pointer nicht ohne
Arrays. Beides sind gewissermassen 2 Spielarten von ein und demselben.
Und beides kann man nicht verstehen ohne Pointerarithmetik.