Forum: Mikrocontroller und Digitale Elektronik Pointer Addition Atmel


von Gilles (Gast)


Lesenswert?

Hallo!
Ich muss nen AtMega in C Programmieren und bin aus der ganzen Syntax 
etwas raus... Ich wollte fragen, ob folgende Operation geht:

uint8_t *a;
uint8_t b;

b=*(a +3-12*4);

Geht das mit dem "+3-12*4" oder schlicht irgendein anderer 
mathematischer Ausdruck in der Pointerklammer?

Ich habs gerade etwas schwer dies auszuprobieren...

Vielen Dank,
Gilles

von (prx) A. K. (prx)


Lesenswert?

Tipp: x[y] ist per Definition identisch mit *(x+y)

von Axel S. (a-za-z0-9)


Lesenswert?

Gilles schrieb:

> Ich muss nen AtMega in C Programmieren und bin aus der ganzen Syntax
> etwas raus... Ich wollte fragen, ob folgende Operation geht:
>
> uint8_t *a;
> uint8_t b;
>
> b=*(a +3-12*4);

Gehen wird das sicher, weil Zeiger am Ende ja auch nur Zahlen sind. 
Aber: es ist ganz schlechter Stil, weswegen C-Compiler nach K&R die 
meisten arithmetischen Konstrukte mit Zeigern mittlerweile mit Warnungen 
quittieren.

Abgesehen davon ist solcher Code meistens auch noch ganz schlecht les- 
und mithin wartbar. Und last not least: in 99.9% der Fälle vollkommen 
unnötig. Der wesentliche Grund für die Verwendung von Hochsprachen ist 
ja, den Programmcode leichter lesbar zu machen. Darum gibt es Strukturen 
und Arrays, mit denen man Elemente schön lesbar adressieren kann ohne 
dazu händisch Pointer-Arithmetik betreiben zu müssen.


XL

PS: auf µC halte ich die Verwendung derartiger Konstrukte für noch 
verwerflicher als bspw. auf PC. Während letztere ein Laufzeitsystem 
haben, das Zugriffe über ungültige Pointer mit einer gewissen 
Wahrscheinlichkeit erkennen und die Reißleine ziehen kann, haben µC 
nichts derartiges. Da rennt das Programm dann einfach mit Müll weiter 
und macht sonstwas.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.