Pointer

Diskutiere Pointer im Developer Network Forum im Bereich Hardware & Software Forum; Also was Pointer sind, und wie man im prinzip damit arbeitet hat mir google schon verraten, aber ich hab immer noch nicht ganz verstanden warum es...
  • Pointer Beitrag #1
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
Also was Pointer sind, und wie man im prinzip damit arbeitet hat mir google schon verraten, aber ich hab immer noch nicht ganz verstanden warum es mal sinnvoll ist einen Pointer zu benutzen, und mal eine normale Variable...
kann mir das evtl jemand erklären?

mfg
Bagman
 
  • Pointer Beitrag #2
Scorn07

Scorn07

Bekanntes Mitglied
Dabei seit
14.01.2007
Beiträge
253
Reaktionspunkte
0
Immer wenn du Funktionen benutzt und Variablen an eine Funktion übergibst, dann wird quasi eine Kopie der Variable für die Funktion erstellt.
Bei großen Objekten z.B. kann das relativ zeitaufwändig werden. Statt das komplette Objekt zu übergeben kannst du einfach einen Zeiger übergeben, der auf das Objekt zeigt.

Außerdem kann man sie benutzen um auf einzelne Positionen in Feldern zu zeigen. und und und
 
  • Pointer Beitrag #3
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Außerdem der klassische Fall, dass eine Funktion die ihr übergebenen Paramter verändern können soll. Das einfachste Beispiel dafür ist eine Funktion, die zwei Variablen vertauscht. Da Funktionen nur einen Rückgabewert haben funktioniert das so nicht.

Außerdem kommen Zeiger häufig bei Datenstrukturen wie (verketteten) Listen, Bäumen, usw. vor. Da hat üblicherweise jedes Datenelement einen oder mehrere Zeiger, die z.B. auf den Vorgänger, Nachfolger, das übergeordnete Element, o.ä. zeigen. So kann man sich dann durch die ganze Liste durchhangeln, wenn man einfach diesen Zeigern folgt.
 
  • Pointer Beitrag #4
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
Man definiert also Objekte, die aufeinander zeigen?
Wenn ich dann solche Datenstrukturen wieder auslese, muss ich mich dann von Objekt a zu Objekt b hangeln, fragen was b fürn Pointer hat um zu wissen wie ich zu c komme?
 
  • Pointer Beitrag #5
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Ja, so kann man sich das vorstellen. Das ist aber nur eine mögliche Anwendung von Pointern; geht allerdings schon mehr in Richtung des Themas Datenstrukturen als ums Programmieren an sich.
Speziell interessant sind solche Strukturen z.B. für sortierte Listen, weil man da über einfache Pointeroperationen z.B. Objekte an der richtigen Stelle einfügen oder löschen kann.
 
  • Pointer Beitrag #6
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Ein Zeiger ist erstmal nur eine Variable, die eine Speicheradresse enthält. Wenn Du mit malloc() bzw. new() z.B. 1000 Bytes an Speicher anforderst, dann reserviert Windows Dir bzw. Deinem Programm 1000 Byte im Hauptspeicher. Die Details der Speicherverwaltung sind erstmal nicht wichtig.

malloc() und new() geben Dir dann die Adresse zurück, wo im Hauptspeicher Dein reservierter Speicher liegt. Diesen Speicher kannst Du dann beliebig verwenden. Üblicherweise verwendet man diesen Speicher, um Strukturen wie Listen, Arrays, usw. darin abzulegen. Um das Rad nicht jedesmal neu erfinden zu müssen, gibt's für C++ z.B. die STL (Standard Template Library).

Man kann mit Zeigern auch rechnen. Wenn Du allerdings versuchst, mit einem ungültigen Zeiger, also einem Zeiger, der auf eine Speicheradresse zeigt, die Du vorher nicht reserviert hast, dann stürzt Dein Programm ab, da Windows diesen Zugriff verhindert. Diese Art von Fehlern sind übrigens recht häufig anzutreffen.
 
  • Pointer Beitrag #7
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
Muss ich dann also bei der Deklaration von einem Zeiger sofort einen Speicherbereich reservieren? Bis jetzt hab ich son bisschen rumgespielt mit Zeigern, und es funtioniert alles ohne Speicher explizit zu reservieren....
Allerdings waren das dann Zeiger auf integer-Werte, ist das erst ab einer gewissen Größe, also Beispielsweise bei Objektzeigern wichtig Speicher zu reservieren?
Danke für die bisherige Resonanz übrigens, hat mir schon ne Menge geholfen.

Bagman
 
  • Pointer Beitrag #8
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Wie Unimatrix sagte, beinhaltet ein Zeiger nur eine Speicheradresse. Was dort steht ist für den Zeiger prinzipiell egal.
Wenn du mit einem Zeiger auf eine Variable verweist, dann wurde der Speicher an der Stelle schon bei der Deklaration dieser Variablen reserviert. Man kann allerdings eben auch explizit Speicher reservieren, um dort irgendwelche Daten abzulegen. Man muss dann natürlich wissen, was man dort hinschreibt, bzw. wie man die Daten dort interpretieren muss.
 
  • Pointer Beitrag #9
B

Bagman

Bekanntes Mitglied
Dabei seit
13.12.2006
Beiträge
56
Reaktionspunkte
0
mkay, thx frage geklärt würd ich ma sagen
 
Thema:

Pointer

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben