• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

C++ Zeiger

dooley2

Guest
ich hab mal den quellcode angehängt. ziel sollte es sein, das programm zum laufen zu bringen. dazu müssen die unterstriche halt durch den jeweiligen operator (*/&/kein operator) ersetzt werden. dachte, das sei schnell erledigt, nur hab ich gerade anscheinend nen brett vorm kopp - es kommt nur murks raus... :8[:

kann mir jemand sagen, was wo hinkommt und vor allem WARUM!? :)

edit: hat jemand eigentlich nen heissen tipp für ein hervorragendes c++ buch für's selbststudium? also kein nachschlagewerk sondern "lehrbuch".
 

killerchicken_inaktiv

Guest
es ist bei sowas immer nett, einen Einführungssatz zu schreiben... "Für blah brauch ich blupp, und ich habe hier in Zeile 12 das und das ausprobiert, aber"...

Naja, hier das was ich machen würde... (btw: Das Programm hat einen Bug. 1 ist keine Primzahl, wird aber als Prim erkannt.)
 

dooley2

Guest
das programm funktioniert und dafür schon mal danke!

nur verstehen tu ich's ehrlich gesagt noch nicht ganz. wenn noch zeit und lust bestünde wäre ich um ein zwei erklärende worte dankbar, ich möchte es halt gerne nachvollziehen. zb z..128 ist mir durchaus klar, hier wird der adressspeicherbereich ausgegeben, und das macht man mit "et", naja aber bspw. z. 45, 73, 84, 109(!) ... nicht. :-/

btw kk künftig werd ich dann im quellcode kommentieren was ich schon ausprobiert hab. ;)
 

killerchicken_inaktiv

Guest
hm. hast du noch nie von Call by Reference gehört? Das ist zB Zeile 45. Wenn du in der Funktionsdeklaration ein & angibst, bedeutet dies, dass die Funktion nicht mit einer Kopie der Variablen, sondern direkt mit der Variablen arbeitet - Änderungen an der Variablen in der Funktion bedeuten also Änderungen der Variablen beim Aufrufer. Wenn du die Funktion aufrufst, wird das allerdings nicht noch einmal sonderlich gekennzeichnet, du steckst also die Variable einfach rein wie sonst auch (nur dass ohne & in der Funktionsdeklaration eben eine Kopie erzeugt wird, auf der die Funktion arbeitet).

73, 84, 109: Hier arbeitest du mit einem sogenannten Zeiger. Ein Zeiger ist eine Variable, der auf eine Stelle im Zeiger zeigt, daher der Name. Wenn dir Zeile 128 wirklich klar ist, dürfte dir das Konzept der Speicheradresse ja relativ bekannt sein - der Zeiger ist also eine Variable, die genau diese Speicheradresse beinhaltet. Ist jetzt ptr ein Zeiger, bekommst du den Wert, auf den dieser Zeiger zeigt, indem du den Zeiger dereferenzierst - *ptr geschrieben. Das passiert in Zeilen 73, 84. Die Funktion isPrime erwartet einen Zeiger auf einen unsigned integer - daher der Stern in Zeile 69. Da du aber nirgendwo einen Zeiger explizit anlegst, kannst du in Zeile 109 durch das & die Adresse übergeben, an der die Variable lowestDivisor gespeichert ist - das ist nichts anderes als ein Zeiger.

Ich empfehle dir ein gutes C-Buch anzugucken, da werden Zeiger nämlich meistens viel besser erklärt, als in C++-Dingern - in C sind Zeiger eben die einzige Möglichkeit, soetwas wie call by reference (siehe weiter oben) zu implementieren.

[edit] Achso: Leih dir das Buch in einer Bibliothek aus, bevor du es kaufst! Jeder kommt mit anderen Büchern anders zurecht als der nächste, alles andere ist sinnlos.
 
Oben