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
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
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
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
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.