Pointer Addition Atmel

Gast #2912068
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
#2912119
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren