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

31

13.04.2013, 16:27

Hmm was soll ich großartig dazu sagen ...

C-/C++-Quelltext

1
*(e1)->xPos = 5;

Klappt auch nicht.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

32

13.04.2013, 16:30

Weil falsch geklammert ist. Vermutlich ein Tippfehler.
(*e1)->xPos = 5;
Soweit solltest du aber auch selbst denken können;) Und man muss ja nicht alles verstehen. Wenn dich der Pointer auf Pointer Kram verunsichert dann beachte es halt erst mal nicht. Wenn du irgendwann zu dem Punkt kommst, an dem du das brauchst, dann wirst du es schon verstehen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

33

13.04.2013, 16:33

Sorry, das war wirklich ein Tippfehler von mir :(
Natürlich sollte erst dereferenziert werden und dann der Zugriff erfolgen. Werde das gleich editieren...
Hat der -> eine höhere Priorität als der * Operator?

34

13.04.2013, 16:34

Sollte ... Ist das Wort. Habe mich schon immer mit Pointern schwer getan. Dann vernachlässige ich Pointer 1 Woche lang und habe alles wieder vergessen. Aber naja, warum muss dort eine Klammer um e1 stehen. Also : Warum kann man nicht einfach *e1->xPos = 5; schreiben? Wo liegt da der Unterschied?

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

35

13.04.2013, 16:40

Weil der ->Operator eine höhere Priorität hat als der * Operator. D. h. der Compiler versucht erst auf Enemy::xPos zuzugreifen (über den -> Operator) aber der -> Operator funktioniert nur mit einfachen Zeigern. Mit der Klammer um *e1 wird das zuerst ausgewertet und der Compiler kann dann über den einfachen Zeiger, der von * zurückgegeben wird mit dem -> Operator darauf zugreifen.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

36

13.04.2013, 16:40

Wie ist es möglich, dass man eine Zahl als void betrachten kann.

Lies genauer, nicht als void sondern als void*.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

37

13.04.2013, 16:57

Und was die Operatoren angeht. Guck doch mal folgendes Beispiel:
5 + 3 * 2 = 11
Warum ist das so? Weil * stärker bindet als +. Am besten gewöhnt man sich an einfach immer zu klammern, dann kommt es zu keinen Missverständnissen. Und wenn du dich immer schon mit Zeigern schwer tust und das ganze nach einer Woche schon wieder vergessen hast, dann ist das ein sehr schlechtes Zeichen. Im Prinzip gibt es da nicht viel zu verstehen. Anwenden heißt es hier einfach. Je mehr man entwickelt umso mehr wird man davon gebraucht machen müssen. Dadurch verstehst du dann eigentlich relativ schnell was das ganze soll. Oder du solltest dich nach einer anderen Sprache umsehen, aber auch dort werden solche Probleme auftreten.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

38

13.04.2013, 17:10

Naja, 1 Woche ist vielleicht leicht untertrieben gewesen. ( Mach ich gerne mal ... )
Sind zwar schon ca. 2-3 Monate in denen ich überhaupt nicht mehr C++ anfasse, da ich entweder momentan keine Lust habe zu programmieren oder einfach nur zu viel Stress habe.

Und nur weil ich ein Thema, und zwar Pointer, immer wieder mal vergesse heißt es doch nicht, dass ich mich nach einer anderen Programmiersprache umschauen sollte. 8|
Schließlich ist kein Mensch perfekt ;).

Ich bin und bleibe bei C++ bis ich irgendwann Java anfange zu lernen. In der Schule im Programmierunterricht lerne ich momentan die Sprache C# wobei es auch mal je nach Laune ist, was ich mehr übe und benutze. Vielleicht nicht der beste Weg, aber C++ ist halt meine "Freizeitsprache" und C# ist die Sprache die ich lernen muss.

Danke für die ganzen hilfreichen Antworten. Mittlerweile habe ich es dank euch verstanden ^^

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

39

13.04.2013, 17:25

Zeiger sind nun mal eine Sache die fest mit C++ verankert sind. Du könntest genau so gut sagen du hättest while-Schleifen nicht verstanden. Dass du immer wieder vergisst was das ganze soll, zeigt eigentlich, dass du es vorher auch nicht richtig verstanden hast;) Warum das so ist kann jetzt viele Möglichkeiten haben. Wie du damit umgehst ist deine Sache.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

40

13.04.2013, 17:36

Konzentrier dich doch lieber komplett auf C#.
Eine schöne, gut durchdachte, moderne, komfortable Sprache mit einer grandiosen Standardbibliothek.

Werbeanzeige