0 Daumen
521 Aufrufe

Frage:

Was sind denn die Vorteile von einem Zeiger in der C programmierung? Ich habe mir schon einige Youtube Videos angesehen aber ich Verstehe den Sinn bzw. den Vorteil dahinter nicht. Bei einem Zeiger wird ja als Adresse abgespeichert die dann auf eine andere Adresse zeigt um dort den Wert zu erhalten. Kann mir jemand den Vorteil in einem kurzen Satz erklären. Haha Danke :D

Avatar von

2 Antworten

0 Daumen
 
Beste Antwort

C verwendet sogennantes Call-by-Value. Das heißt wenn eine Funktion aufgerufen wird, dann wird ihr der Wert des Argumentes übergeben, nicht dessen Ort im Speicher. Das wird realisiert indem der Wert an eine neue Stelle im Speicher kopiert wird.

Die Funktion

bool hatElement(struct Liste haystack, int needle);

soll prüfen ob die Liste haystack die Zahl needle enthält. Angenommen haystack ist mehrere Gigabyte groß. Dann wird viel Zeit auf das Kopieren von Daten verwendet.

Dieses Kopieren kann vermieden werden indem anstatt der Liste ein Zeiger auf die Liste übergeben wird:

bool hatElement(struct Liste* haystack, int needle);

Zeiger können also dazu verwendet werden Kopieren großer Datenmengen zu vermeiden.

Die Funktion

int holeElement(struct Liste* haystack, int position);

soll aus der Liste haystack das Element an der Position position liefern. Es könnte aber sein, dass an dieser Position überhaupt kein Element vorhanden ist. Um das mitzuteilen, kann man einen zusätzlichen Parameter verwenden:

int holeElement(struct Liste* haystack, int position, int* fehlercode);

Die Funktion kann jetzt in *fehlercode speichern, ob an der postion ein Element gefunden wurde. Der Paramter muss ein Zeigertyp sein, weil der Wert ansonsten nach Beendigung des Funktionsaufrufs verloren geht.

Zeiger können also dazu verwendet werden mehrere Rückgabewerte zu liefern.

Vorteil in einem kurzen Satz

Man kann mit Zeigern Call-by-Reference simulieren.

Avatar von 5,6 k
0 Daumen

Zeigervariable können jede Menge Speicherplatz
sparen.

In Pascal

type abc
Record
d,e,f : integer,
g,h,i, Real
j.k.l. : string [ 100]
end

Dieser Datentyp benötigt 400 Byte ( angenommen )

Var feld : [ 1..1000 ] of abc. ( 400000 Byte )
mit einem Zeiger
( zeigervaribale 8 Byte angenommen )
Var feld : [ 1..1000 ] of pointer abc. ( 8000 Byte )

Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community