Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

ich bin im 1.AJ und lerne wie so viele, C++ in der schule. nun ich bin jemand der eigentlich sehr gut mitkommt aber kann mir mal wer eine gute Aufgabenstellung sagen und mir an dieser verdeutlichen welche Vorteile Pointer (Zeiger) haben. Das muss jetzt nichts riesig großes sein. Eben nur was was mir das zeigt. Ev. könnte das ja dann auch jemand korrigieren ;););).Der Grund wieso ich da was will ist weil wir nur in der Schule ein Bsp gemacht haben. Das war: Machen sie eine Funktion die die Diskriminante berechnet und benutzen sie eine Pointer. Das war natürlich ausführlich aber man hätte eben diese Aufgabe auch leichter kösen können wenn ich die Variable wieder rückübergeben hätte. So wie bisher eben... Aber bitte auch nur lösbares!!! *G* :OD

Fänd ich echt super!!!

Geschrieben

Bitte poste mal ein Minimum von Code zu dem Beispiel. Ich weiß nicht, wo genau Dein Problem liegt. Es wäre schön, wenn man Dein Beispiel hätte und es daran erklären könnte. Dann lassen sich auch besser Aufgaben zu Deinem speziellen Problem finden.

Jan

Geschrieben

Ich habe nicht unbedingt ein Problem mit Pointer nur will ich es noch zwei Kumpels erklären... aber eben an einem bessern / anderen Bsp als in der Schule. Als einer von euch das gelernt hat muss er doch auch ein Beispiel gehabt haben nur will ich eben im mom nur die Aufgabenstellung!!!

Geschrieben

Na, mit einem Beispiel wird Du da aber nicht weit kommen. Pointer koennen ziemlich komplex werden. Ein immer wieder gern genommenes Beispiel fuer Pointer ist quicksort: "Schreiben Sie eine Sortierroutine, die mit beliebigen Elementen umgehen kann":

void qsort(void *base, size_t num_elements, size_t element_size,

int (*compare)(void const *, void const *));

Nic

Geschrieben

nic_power hat schon recht: mit einem Beispiel wirst Du da nicht weit kommen. Ehrlich gesagt versuche ich auch immer noch dahinter zu kommen, was Du nun genau suchst. Beispiele/Aufgabenstellungen in denen statt "call by value" "call by reference" benutzt wird. Beispiele, bei denen man nur mit Zeigern zum Ziel kommt oder Beispiele die speziell auf Speicheranforderung zur Laufzeit abzielen.

Jan

Geschrieben

Bei einem Zeiger, der auch nur eine Referenz ist, wird halt unnötiges Kopieren vermieden und immer mit dem selben Objekt gearbeitet. Der Hauptsinn ist dabei, daß von einer Variable keine Kopien angelegt werden - also "real" selben Daten bearbeitet werden - und Bearbeitungsvorgänge schneller ablaufen - sonst nix weiter. Das "Zurückreichen" von Werten verursacht auch unnötige Kopiervorgänge und erhöhte Stack-Belastung (außer in Ausnahmefällen bei Fastcalls und inline-Funktionen). Eine Faustregel besagt jedenfalls, daß man bei mehr als 2 Parametern (vor allem wenn das keine Standard-Datentypen sind) bei Funktionen lieber Referenzen, bzw. Zeiger überreichen soll (gerade wegen den Fastcalls, weil die Parameter dann in Prozessor-Registern der Funktion überreicht werden können ohne unnötig den Stack zu belasten).

Referenzen merke ich mir immer als konstante Zeiger ... das haben wir mal ausdiskutiert gehabt - auch wenn´s nach der Theorie nicht so sein soll - praktisch wurde das so von den Compilerbauern gelöst.

Gleich mit Funktionszeigern loszulegen ist ein schlechtes Beispiel, weil hier eine andere Absicht dahinterliegt. Es sollen Daten in diesem Fall ohne genaueres Wissen über das Sortierkriterium selbst von einer Standard-Funktion sortiert werden. Dieses liegt eben im Funktionszeiger "versteckt". Ein Wechseln des Funktionszeigers ermöglicht es also der Funktion andere Kriterien festzulegen. Das hat ja mit der Stackbelastung durch Datenkopiererei recht wenig zu tun (hier wird ja auch nur ein Bool als Kriterium für tauschen oder nicht tauschen herangezogen).

Es geht hier also in der ersten Linie um Prinzipien bezüglich des Laufzeitverhaltens.

Geschrieben
Original geschrieben von Crush

Gleich mit Funktionszeigern loszulegen ist ein schlechtes Beispiel, weil hier eine andere Absicht dahinterliegt. Es sollen Daten in diesem Fall ohne genaueres Wissen über das Sortierkriterium selbst von einer Standard-Funktion sortiert werden. Dieses liegt eben im Funktionszeiger "versteckt". Ein Wechseln des Funktionszeigers ermöglicht es also der Funktion andere Kriterien festzulegen. Das hat ja mit der Stackbelastung durch Datenkopiererei recht wenig zu tun (hier wird ja auch nur ein Bool als Kriterium für tauschen oder nicht tauschen herangezogen).

Es geht hier also in der ersten Linie um Prinzipien bezüglich des Laufzeitverhaltens.

Ich hatte das Beispiel absichtlich so gewählt, um drauf hinzuweisen, daß es mit einem einzigen nicht getan ist.

Nic

Geschrieben

Kleiner Nachtrag:

Original geschrieben von Crush

Referenzen merke ich mir immer als konstante Zeiger ... das haben wir mal ausdiskutiert gehabt - auch wenn´s nach der Theorie nicht so sein soll - praktisch wurde das so von den Compilerbauern gelöst.

Bei solchen Fragen empfiehlt sich immer ein Blick in die dazugehoerige FAQ: http://www.inf.uni-konstanz.de/~kuehl/cpp/cppfaq.htm/references.html

Nic

Geschrieben

"Important note: Even though a reference is often implemented using an address in the underlying assembly language, please do not think of a reference as a funny looking pointer to an object. A reference is the object. It is not a pointer to the object, nor a copy of the object. It is the object."

Hab´ ich doch gesagt: Theoretisch soll man es als das Objekt selbst verstehen - aber der Compiler macht nix anderes als einen initialisierten konstanten Zeiger zu verwenden, genauso wie beim normalen Zeiger, der halt auch das Objekt selbst benutzt - es werden lediglich der Zugriff auf diesen Zeiger und die Dereferenzierung versteckt.

Fazit: Theorie & Praxis sind halt 2 verschiedene Dinge - aber es macht auch eigentlich keinen Unterschied, wie man etwas versteht, sondern wann man was einsetzt - und warum.

Geschrieben

Hallo,

Entscheidend ist die Bemerkung "please do not think of a reference as a funny looking pointer to an object." Wie die Implementierung durch den Compilerbauer aussieht ist eigentlich unerheblich, da dies implementierungsabhaengig ist. Im Normallfall wird dies zwar ueber einen Pointer realisiert - wie Du oben schon angemerkt hast - es sind aber auch andere Loesungen denkbar.

Nic

Geschrieben

Aufgabe:

Schreibe ein Programm, welches von 10 Mitarbeitern den Namen, die gefahrenen Kilometer und das ausgegebene Geld einliest. Anschließend soll es für jeden Mitarbeiter den durchschnittlichen Literpreis augeben und einen Gesamtdurchschnitt berechnen.

Schreibe Eingabe, Berechnung und Ausgabe in getrennten Funktionen!

Daür wirst du Pointer brauchen!

(korrigiert mich wenn ich spinne:D)

Geschrieben

@scav:

bei deiner aufgabe braucht man nicht unbeding zeiger. man kann auch einfach sämtliche variablen global deklarieren. da das keiner macht eine schöne aufgabe.

meine aufgabe:

schreibe eine einfach/ doppelt verkettete liste, die int zahlen speichern kann. dabei soll immer nur soviel speicher reserviert werden wie wirklich nötig. nicht unbedingt etwas bei dem man zeiger bei der übergabe braucht, hilft aber beim verstehen von zeigern.

Geschrieben
Original geschrieben von maddin

@scav:

bei deiner aufgabe braucht man nicht unbeding zeiger. man kann auch einfach sämtliche variablen global deklarieren. da das keiner macht eine schöne aufgabe.

meine aufgabe:

schreibe eine einfach/ doppelt verkettete liste, die int zahlen speichern kann. dabei soll immer nur soviel speicher reserviert werden wie wirklich nötig. nicht unbedingt etwas bei dem man zeiger bei der übergabe braucht, hilft aber beim verstehen von zeigern.

Praktisch jedes Problem laesst sich auch mit globalen Variablen loesen, man sollte dies jedoch immer vermeiden und nur dann globale Variable verwenden, wenn es unumgaenglich ist (errno z.b.).

Nic

Geschrieben

Erstelle eine Tabelle (Tab1) mit Zufallszahlen und sortiere die Inhalte nicht direkt, sondern mit einer Hilfstabelle (Tab2) (wo die Zeiger auf die Tabelleninhalte von Tab1 rein müssen). Der Inhalt von Tabelle 1 muß also in der Orginalform erhalten bleiben und es dürfen von den Inhalten keine Kopien angelegt werden.

Den Spaß könnte man dann noch weitertreiben mit weiteren Hilfstabellen, die absteigend sortiert sind oder von mir aus nach den Bits 6-12 sortieren oder auch sonstwas - hauptsache es werden von Tabelle1 keine Inhalte kopiert.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...