Hi, ich stell mich bei der Suchtext Formulierung etwas blöde an, alle Versuche bisher gescheitert. Deshalb schreibe ich einen eigenen Threat dazu. ich stell mir folgende Frage : A) ist es besser, ich erzeuge innerhalb der Main Prozedur eine Variable, die ich dann über den Aufruf der Funktion getVar mit deren Rückgabewert beschreiben lasse B) od. Übergebe ich besser den Zeiger auf die Variable über die Funktionsparameter und lasse die Variable direkt ändern. Meiner Meinung nach verzichte ich für eine bessere Übersichtlichkeit auf die Zeiger übergabe. Also wäre Punkt A) meine Wahl. Aber wahrscheninlich spare ich durch arbeiten mit Zeigern Rechenzeit und Speicher. Gibts es zu diesem Thema ein gutes Buch bzw. eine empfehlenswerte Website ? Ich habe bereits "Softwareentwicklung in C für Microprozessoren und Microcontroller" und "CleanCode" gelesen. Gibt es noch mehr solcher Bücher ? gruss MM
MM schrieb: > Aber wahrscheninlich spare ich durch arbeiten mit Zeigern Rechenzeit und > Speicher. Auch wenn Returnwerte oftmals vom Compiler in Registern zurück gegeben werden? Hast du dir mal konkrete Beispiele/Testfälle im Disassembler angeschaut?
Ich hab jetzt weder A noch B verstanden, vielleicht liegt das Problem darin daß dir selbst die Lösungen och nicht ganz klar sind und du sie deswegen so schlecht und undeutlich beschreibst ? Mir scheint A zu sagen char var[99]; main { getvar(); var[x] benutzen... } und nicht etwa main { char *var; var=getvar(); var[x] benutzen... } und B zu sagen main { char var[99]; getvar(var); var[x] benutzen... } B wäre klar besser, aber wenn var grösser ist als übergeben, dann sollte man auch die Grösse übergeben, und getvar stellt sicher, daß nicht zu viel in var hineinkopiert wird. main { char var[99]; getvar(var,sizeof(var)); var[x] benutzen... }
Hi, Ein Pointer ist idr. 16 Bit breit, also wuerd ich bei einer Aenderung immer direkt den Returncode verwenden (auch, wenn es mal 32 Bit sein sollten) - immerhin muesstest du donst noch extra den Zeiger dereferenzieren, was auch Zeit und Platz kostet. Wenn Du allerdings mehrere Dinge auf einmal veraendern moechtest, bietet sich ein Pointer auf eine struct an, die Du direkt im Unterprogramm dereferenzierst und damit aenderst. So kannst Du bieliebig viele Variablen in einem Struct aendern, musst aber nur einen Pointer auf das struct uebergeben. Ich hoffe das war halbwegs verstaendlich ;) MfG Sascha
Achja, es bietet sich beim return einer Unterfunktion an, einen Fehlercode zurueckzugeben. So aenderst Du Daten im uebergebenen struct pointer, und wenn was schief geht, hast ne Rueckmeldung ueber den direkten Rueckgabewert der Funktion.
So absolut kann man das wohl gar nicht sagen. Return-Parameter haben schon einmal den Vorteil, dass man die Funktionsaufrufe direkt in einem Ausdruck einsetzen kann. Das geht mit Zeigerübergabe natürlich nicht. Andererseits kann die Verwendung eines Return-Parameters aber auch unnötige Arbeit machen. Was ist z.B., wenn eine Zeichenkette das Ergebnis ist? Die Funktion müsste Speicher reservieren, z.B. mit malloc(), die Daten da rein schreiben und dann einen Zeiger darauf zurückgeben. Die aufrufende Funktion muss sich dann darum kümmern, den Speicher wieder frei zu geben. Auch ist es natürlich viel effizienter, größere Datenmengen als Referenz zu übergeben als sie extra kopieren zu müssen. Zumindest sollte man dem Compiler mit dem Modifier "const" helfen, die Bedeutung richtig einzuschätzen, wenn Variablen nur gelesen werden. Der kann dann automatisch mit einer Referenz arbeiten.
Danke swarner und Detlev, das sind aussagen mit denen ich was anfangen kann. Macht für mich auch alles Sinn..... Dann werde ich mir in Zukunft merken, große Variablen ,Strukturen und Strings als Zeiger zu übergeben Rückgabewerte die kleiner wie 16bit sind, werden über Return zurückgegeben. Hat noch jemand einen Buchtip ? Danke für die bisherigen Antworten ;) Gruss
Schau dir doch einfach mal die Standard-C-Funktionen an. Diese zeigen eigentlich die Philosophie von C. Z.B.: hat strcpy auch einen Rückgabewert obwohl man es meistens wie eine void-Funktion benutzt.
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.