mikrocontroller.net

Forum: Compiler & IDEs Pointer oder zähler


Autor: F___ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: F___ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.