Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

28.04.2011, 21:54

Meine Rede:

Zitat

Wahrscheinlich liegt es daran, dass ich dann mit die Breite der Kopie von der Struktur ausgebe, oder?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

12

28.04.2011, 21:59

Auch Deine Rede:
Wenn ich die manip-Funktionen in Rückgabetyp int ändere, werden aber beide Breiten geändert:

Und das ist falsch. Es werden nicht beide Breiten geändert. Es wird nur die Breite der übergebenen Kopie verändert, der lokalen Variable namens "s". Das Original "s" wird nicht geändert. Total egal, was da für ein Rückgabetyp drin steht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

13

28.04.2011, 22:08

Ja OK, stimmt - ich geb mich geschlagen.

Also, was entnehmen wir dieser Unterrichtsstunde:

Wenn wir eine Referenz übergeben, arbeiten wir direkt am Original.
Übergeben wir einen Datentyp, arbeiten wir lokal an einer Kopie und das Original wird nicht verändert.


Kannst du mir noch Beispiele nennen, wann ich was verwenden sollte?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

28.04.2011, 22:25

Ein Pointer ist übrigens keine Referenz.

Ein Pointer ist:

C-/C++-Quelltext

1
int manipuliereBreite(Starship *s)


Eine Referenz ist:

C-/C++-Quelltext

1
int manipuliereBreite(Starship &s)


Eine Wert-Kopie ist:

C-/C++-Quelltext

1
int manipuliereBreite(Starship s)


Logischer Weise braucht man Pointer nur für dynamische Speicher-Allokation.
Referenzen sind sinnvoll, wenn der Wert einer Variable geändert werden können muss.
Const Referenzen sind (unter anderem aus Performance-Gründen) sinnvoll zur Übergabe großer Typen wie Klassen oder Structs, die nicht geändert werden sollen.

Const-Referenzen:

C-/C++-Quelltext

1
int manipuliereBreite(const Starship &s)


Ein gutes Buch wäre an dieser Stelle wohl sehr hilfreich für Dich. Denn ohne eins wirst Du diese Zusammenhänge, Unterschiede und Verwendung nie richtig lernen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

15

28.04.2011, 22:37

Man, das ist ganz schön tricky.

Ich danke dir für deine Mühe und Ausdauer mit mir.
Bücher hab ich, aber ich bin bisher noch nie so richtig dahinter gestiegen.

Ich denke "Learning by Doing" ist auch effektiv.

Also bis morgen --> muss üben...

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

16

28.04.2011, 22:52

Ich denke "Learning by Doing" ist auch effektiv.


Das ersetzt aber das erlernen der Grundlagen nicht!

Das sind nämlich Dinge, die du in einem Buch sehr gut nachlesen kannst und liefern meist noch mehr nützliche Informationen, die wir hier nicht jedes mal geben.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

17

28.04.2011, 23:30

Learning by doing ist bei einer Programmiersprache aber eben nur in gewissem Maße effektiv. Du kannst 10 Jahre etwas tun, was offensichtlich funktionier, ohne dass du weißt, dass es im Grunde genommen falsch ist und du lediglich noch nicht in die Situation gekommen bist, dass es auch wirklich schief ging. In einem Buch werden eben auch die Dinge erklärt, die etwas »tricky« sind. Wenn man dann mal das Buch gelese hat, dann ist erscheint es einem deutlich weniger kompliziert als man vllt. vorher glaubte(eben weil Bücher auch mal Beispiele nennen, wie etwas zu gebrauchen ist oder was zu Fehlern führen könnte etc.). Wenn man selber rumprobiert merkt man meist erst zu spät, dass es nicht gut war, was man gemacht hat.
Heißt natürlich nicht, dass es schlecht wäre, auch mal selbst was zu tun. Das ist sogar wichtig. Aber man muss eben ein gesundes Maß zwischen Buch und Praxis finden, um eine Sprache wirklich zu erlernen.

18

29.04.2011, 08:40

Um auf NEUMee frage zu antworten :"Kannst du mir noch Beispiele nennen, wann ich was verwenden sollte? "

naja... du hast es in deinem beispiel eh schon relativ deutlich drin.

stell dir vor du hast eben ein spiel und eine funktion die dir die Größe, Breite, was auch immer deines Schiffs verändert.
wenn du dann einen call-by-value aufruf machst und das schiff übergibts, wird dei schiff immer gleich bleiben.

du musst den aufruf also call-by-reference machen.

lg

19

29.04.2011, 11:22

Nochmals vielen Dank für eure Antworten!!!


Gruß, NEUMee...

Werbeanzeige