Forum: Compiler & IDEs Pointer oder zähler


von F___ (Gast)


Lesenswert?

Hi

Ich habe mal ne frage:


Wenn ich ein Array wie folgt beschreiben möchte:

feld[x] = UDR;

stimmt es, dass der uC jedes mal in einer For Schlaufe bis auf die
Variable "x" raufzählen muss, um die gewünschte Position zu
beschreiben? (oder was macht er genau?)


Stimmt es, dass es darum besser ist, mit Pointer zu arbeiten?

Hoffentlich versteht ihr meine Frage...
Vielen Dank

von Florian Pfanner (Gast)


Lesenswert?

Ich weis jetzt nicht genau was du meinst...
Aber: Die For-Schleife???? brauchtst du (der Compiler) nicht, denn der
AVR hat ja die möglichkeit indirekt mit Offset zu Adressieren. Also ich
glaube, dass der Compiler den Pointer mit der Adresse von feld[0] läd,
un je nach dem welchen Index zu willst, diesen zu dem Pointer
dazuaddiert.

Gruß, Florian

von F___ (Gast)


Lesenswert?

Also ich möchte eigentlich der vorteil eines Pointers gegenüber eines
Zählers wissen!


Dennn ich kann ja entweder mit einem Pointer auf ein Feld zugreiffen
oder mit einer Zählvariable!!!

THANKS

von Florian Pfanner (Gast)


Lesenswert?

Der Vorteil eines Pointers ist, dass dieser auch in einer Unterroutiene
(vorrausgesetzt dieser wird übergeben) ebenfalls gültig ist. Wenn du
die Zählvariable übergibts, dann muss dein Array Global sein, damit du
darauf zugreifen kannst.

Irgendwo hab ich aber mal gelesen, Pointer mehr Code benötigen.

Gruß, Florian

von Jörg Wunsch (Gast)


Lesenswert?

Auf ganz alten C-Compilern (auf der PDP-11) haben Zeiger mal wirklich
weniger Code benötigt, wenn man damit schrittweise ein Feld bearbeiten
wollte.  Daher findet man sie besonders in alten C-Lehrbüchern sehr
gern für diesen Zweck.

Heutzutage gibt es solch eine globale Aussage nicht mehr.  Sehr oft
wird ein Compiler für beides identischen Code erzeugen, man kann also
die Schreibweise benutzen, die einem das Programm übersichtlicher
erscheinen läßt.  Das ist keineswegs immer die Array-Notation!  Wenn
ich beispielsweise die Adresse des x-ten Elements eines Feldes an eine
Funktion foo() übergeben will (damit diese dort was reinschreiben
kann), dann kann ich natürlich schreiben:

  foo(&Feld[x]);

Aber wenn man die Zeigereigenschaften von C verstanden hat (und das
sollte man ohnehin, weil einem das sonst früher oder später auf die
Füße fällt), dann weiß man, daß das hier dasselbe ist:

  foo(Feld + x);

Das Besondere an C ist dabei, daß obiges unabhängig davon ist, aus
welchen Elementen Feld[] aufgebaut ist, das können also auch beliebig
komplexe Strukturen sein.

von Heinz (Gast)


Lesenswert?

Prinziepiell sind doch Arrays Pointer und umgekehrt....
Weiss jetzt nicht genau, was der Compiler aus dem ein oder anderen
mach, aber sollte nicht

int ptr[100]
int * tmp_ptr;
for(tmp_ptr = ptr; <Solange-bedingung> ; tmp_ptr ++)
{
  *tmp_ptr = Wert;
}
schneller sein... (es wird nicht jedes mal die Adresse neu berechnet)
wobei wenn die Solange-bedingung so aussieht
tmp_ptr <= &ptr[99]
dann könnte das ja auch wieder dumm laufen, und die Adresse von
ptr[99]
jedes mal neu berechnet werden...

von Matthias (Gast)


Lesenswert?

Hi

das kommt darauf welche Methoden der Adressierung eine bestimmte
Architektur unterstützt. Wenn die Architektur eine Adressierung der Art
Base+Offset anbietet könnte! sogar der Zugriff per Array und nicht per
Pointer schneller sein da es schneller ist den Offset entsprechend
anzupassen als die gesammte Adresse.

Matthias

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.